【发布时间】:2021-02-27 00:20:04
【问题描述】:
我目前正在使用 Vue.js 3 中引入的新反应性 API。我已按照 documentation 上的说明进行操作,据我了解,当我使用 ref 设置变量时,我将其转换为反应性值。如果我不使用ref,则该变量不是反应性的,如果我更新它,则不应在模板中更新它。
我对我的测试结果感到惊讶:
<script src="https://unpkg.com/vue@next"></script>
<div id="app">
<my-component></my-component>
</div>
<script>
const app = Vue.createApp({});
app.component("my-component", {
template: `
<div>
<ul>
<li>Data not reactive : {{ countNotReactive }}</li>
<li>Data reactive : {{ countReactive }}</li>
</ul>
<button @click="inc">+1</button>
</div>
`,
setup() {
const countNotReactive = 1;
const countReactive = Vue.ref(1);
return {
countNotReactive,
countReactive
};
},
methods: {
inc() {
this.countNotReactive++;
this.countReactive++;
}
}
});
app.mount("#app");
</script>
当我点击 +1 按钮时,我的模板中的所有计数器都会递增。这是渲染:
<!-- Initial -->
<div>
<ul>
<li>Data not reactive : 1</li>
<li>Data reactive : 1</li>
</ul>
<button>+1</button>
</div>
<!-- After click on +1 -->
<div>
<ul>
<li>Data not reactive : 2</li>
<li>Data reactive : 2</li>
</ul>
<button>+1</button>
</div>
我的期望是只看到反应计数器增加。有人可以向我解释为什么不是这样吗?
我不明白为什么在这种情况下我应该使用ref。谁能给我一个例子,让我可以看到 ref 和 non-ref 变量之间的区别?
【问题讨论】:
标签: vue.js vuejs3 vue-reactivity