请考虑以下示例:
Html(
data: "<b>Hai</b>,
defaultTextStyle: TextStyle(fontSize: 15, color: Colors.blue, fontWeight: FontWeight.bold),
),
const App = {
setup() {
const name = Vue.ref("");
let firstTime = true;
const message = Vue.computed(() => {
if (firstTime) {
firstTime = false;
return "Welcome stranger";
}
return `Hello ${name.value}`;
});
return {
name,
message
}
}
};
Vue.createApp(App).mount("#root");
如您所见,<script src="https://unpkg.com/vue@next"></script>
<div id="root">
name: <input v-model="name"/> <br/>
message: {{ message }}
</div>
存储一个 compute 值,该值应跟踪对message
的更新,但不是。
为什么会这样以及如何解决?
答案 0 :(得分:3)
计算对象应始终使用要计算的不可变反应引用对象。
因此,如果您在开始时声明要使用的反应式对象,它将起作用。
const App = {
setup() {
const name = Vue.ref("");
let firstTime = true;
const message = Vue.computed(() => {
name.value;
if (firstTime) {
firstTime = false;
return "Welcome stranger";
}
return `Hello ${name.value}`;
});
return {
name,
message
}
}
};
Vue.createApp(App).mount("#root");
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
name: <input v-model="name"/> <br/>
message: {{ message }}
</div>
答案 1 :(得分:1)
在计算属性的开头将name.value
分配给变量,然后在末尾将其返回
const App = {
setup() {
const name = Vue.ref("");
let firstTime =true
const message = Vue.computed(() => {
let _name=name.value
if (firstTime) {
firstTime= false;
return "Welcome stranger";
}
return `Hello ${_name}`;
});
return {
name,
message
}
}
};
Vue.createApp(App).mount("#root");
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
name: <input v-model="name" /> <br/> message: {{ message }} <br/> name:{{name}}
</div>