引用the vue official documentation个州的话
$refs...他们不是被动的.
然而,我在模板中使用过这样的引用,它们确实是react 式的,甚至在方法、计算props 和观察者中也是如此(只要你在安装后访问它).几个第三方vue库e.g. this one还提供了使用/取决于参考react 性的功能.
有人能澄清一下官方文件所说的裁判不react 是什么意思吗?
引用the vue official documentation个州的话
$refs...他们不是被动的.
然而,我在模板中使用过这样的引用,它们确实是react 式的,甚至在方法、计算props 和观察者中也是如此(只要你在安装后访问它).几个第三方vue库e.g. this one还提供了使用/取决于参考react 性的功能.
有人能澄清一下官方文件所说的裁判不react 是什么意思吗?
您误解了在Vue框架的上下文中,什么是被动的.当然,在安装组件时,您可以在设置$refs
对象后访问其值,但这并不意味着该对象是被动的.
当数据是react 性的时,这意味着对该数据值的更改将触发组件的某个部分的"react ",该部分取决于该数据的值,例如重新呈现模板、重新计算计算的变量或触发观察者.
Read through the documentation on reactivity.
下面是一个例子:
Vue.config.productionTip = false;
Vue.config.devtools = false;
new Vue({
el: '#app',
mounted() {
console.log('$refs.foo in mounted', this.$refs.foo);
},
watch: {
'$refs.foo':{
immediate: true,
handler(value) {
console.log('$refs.foo watcher', value);
}
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div ref="foo"></div>
<div v-if="$refs.foo">
If $refs.foo was reactive, the template would update and you would see this message
</div>
</div>
在该示例中,您可以看到$refs.foo
的观察者最初记录$refs.foo
的值为undefined
.这是有道理的,因为watcher在安装组件之前就已经启动了,所以$refs
对象的属性还没有设置.然后,在mounted
钩子中,我们看到$refs.foo
的值已按预期设置.
如果$refs
是react 性的,那么我们将看到模板更新,因为v-if="$refs.foo"
指令的计算结果将是true
.我们还会看到,在设置了$refs.foo
的值之后,观察者再次开火,记录下新的$refs.foo
值.然而,由于$refs
不是react 性的,这两种情况都不会发生.