如何解决Vue3反应性奇怪的行为
我正在学习 vue3 反应系统,但无法弄清楚以下奇怪的行为。这是我的代码。
setup(props) {
let weekDay = props.weekDay;
let taskState = reactive({
[weekDay]: [[{
description: '',status: '',}]],});
function changeStatus(index,event) {
let task = taskState[weekDay][index]; //works
taskState[weekDay][index] = {
...task,status: event.target.value
};
}
return {
taskState,changeStatus
}
}
被动地更新状态状态看起来可行,但如果我像下面那样更改功能,这将不起作用。为什么会发生?是对象 task 和 taskState[weekDay][index] 不是 一样吗?
function changeStatus(index,event) {
let task = taskState[weekDay][index]; //not works
task = {
...task,status: event.target.value
};
}
解决方法
看起来 task 对象不是反应式的,因为我们使用赋值来更改值到常规对象,并且对象 task 不再有反应式父对象例如taskState,所以没有附加的setter,返回一个简单的值,而不是一个反应式代理
function changeStatus(index,event) {
let task = taskState[weekDay][index]; //not works
task = {
...task,status: event.target.value
};
}
如果我们想让它工作,我们应该像这样使用:
function changeStatus(index,event) {
let task = taskState[weekDay]; //works
task[index] = {
...task[index],status: event.target.value
};
}
在这种情况下,task[index] 将是被动的,setter 将在 taskState[weekDay] 对象中被触发
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。