[vue]ref属性(feat.注意事項)
19089 ワード
refとは?
1)定義
refは、ビューで構成部品またはDOMにアクセスするためのプロパティです.
マウントされている要素にのみ適用されます.ロードされていない要素の場合、ref undefined
が生成されます.
2)使用方法
ref
の属性にアクセスし、this.refs
、最も間違いやすい点の一つはrefとrefsのスペルを区別できないことです.
// App.vue
<template>
<div>
안녕하세요
<vue-person
ref="VuePerson"
name="dorosy"
/>
</div>
</template>
<script>
import VuePerson from '@comp/VuePerson'
export default {
name: 'App',
components: {
VuePerson,
},
mounted() {
const name = this.$refs.VuePerson.name
console.log('name', name) // name dorosy
}
}
</script>
// VuePerson.vue
<template>
<div>
Hi
</div>
</template>
<script>
export default {
name: 'VuePerson',
props: {
name: {
type: String,
default: ''
}
},
methods: {
sayHi () {
console.log(`Hi My name is ${this.name}`)
}
}
}
</script>
3)特徴
すべてのターゲット属性にアクセスできるため、関数を呼び出すこともできます.
でもこれじゃちょっとjqueryな感じ必要に応じてのみ使用します.
// App.vue
<template>
<div>
안녕하세요
<vue-person
ref="VuePerson"
name="dorosy"
/>
</div>
</template>
<script>
import VuePerson from '@comp/VuePerson'
export default {
name: 'App',
components: {
VuePerson,
},
mounted() {
// 대상의 sayHi 메서드 호출
this.$refs.VuePerson.sayHi() // Hi My name is dorosy
}
}
</script>
// VuePerson.vue
<template>
<div>
Hi
</div>
</template>
<script>
export default {
name: 'VuePerson',
props: {
name: {
type: String,
default: ''
}
},
methods: {
sayHi () {
console.log(`Hi My name is ${this.name}`)
}
}
}
</script>
2.注意事項
1)未マウントの要素
v-if=falseがレンダリングされていないか、create()で使用されている場合、refが定義されていないか、属性がないことを示すエラーが発生します.
2)ref,refsのスペルミスは想像以上に多かった.
3)計算で使用する場合
このような状況も想像以上に多い.
レンダリングがあるかどうかをチェックしたいのですが、仕方がないのでacomputed(私ではない)を使ってもいいと思います.
計算が正しくチェックできません.
<template>
<div>
안녕하세요
<vue-person
ref="VuePerson"
name="dorosy"
/>
</div>
</template>
<script>
import VuePerson from '@comp/VuePerson'
export default {
name: 'App',
components: {
VuePerson,
},
computed: {
isExist() {
console.log('isExist', this.$refs)
return this.$refs.VuePerson ? true : false
}
},
created() {
console.log('created', this.isExist)
},
mounted() {
console.log('mounted', this.isExist)
}
}
</script>
4) watch
計算に似た脈絡やレンダリングの瞬間をキャプチャするにはwatchを使用します.△これは私の物語です.
watchに気づかれない
<template>
<div>
안녕하세요
<vue-person
ref="VuePerson"
name="dorosy"
/>
</div>
</template>
<script>
import VuePerson from '@comp/VuePerson'
export default {
name: 'App',
components: {
VuePerson
},
data() {
return {
isExist: this.$refs.VuePerson
}
},
watch: {
isExist(val) {
console.log('isExist', val)
},
'refs.VuePerson' (val) {
console.log('refs.VuePerson', val)
}
}
}
</script>
ここまで来て私もこのような考えを持っています.なぜrefは成功する時もあれば、失敗する時もあるのか...これは私が正式な書類をよく見ていないせいです.5)追跡困難状態
これはjqueryに直接アクセスする方法であるため,想像以上にステータスの追跡が困難である.
原因はわかりませんが、vueの開発過程では、論理全体を1つのファイルに配置しない場合が多く、その中にrefがいくつかあってもデータの変化を追跡するのは難しいです.
△カバーするとき、疲れた経験があります.
これじゃないとだめだその時に使いましょう
(思ったほどではなく、その場合に簡単に書きたいだけ)
Reference
この問題について([vue]ref属性(feat.注意事項)), 我々は、より多くの情報をここで見つけました https://velog.io/@skyepodium/vue-ref-속성-feat.-주의할-점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol