javascript - VueJS 计算的道具不是反应式的
问题描述
前言
我正在尝试将一段数据用作子组件中的道具。我需要稍微修改一下这个道具以获得我想要的数据。我的问题是计算的道具不是反应性的。
我的数据看起来如何
{
"SomeItem": "0",
"DynamicItem1": "0",
"SomeOtherDynamicItem": "0"
}
这是我的初始状态,我通过 JSON.transform() 将其转换为对象。重要的部分是可以有任意数量的动态项目。可以有DynamicItem10等等。
我在用数据做什么
该数据存在于我的父组件的数据对象中。每当我从我的 websocket 获得更新时,这就是我更改数据的方式:
Vue.set(this.nodes, node, value)
我从 vues docs 中的深度文档中得到了这个。这应该使动态添加的属性到数据对象的反应性,AFAIK。这可以正常工作,因为我可以在控制台中看到数据正在正确更新。
接下来,我通过 props 将此数据传递给我的子组件,如下所示:
<Step1 :nodes="nodes" style="grid-row-start: 1; grid-column-start: 1" />
在我的子组件中,我首先根据这个线程将道具分配给我的数据组件:
data() {
return {
localnodes: this.nodes
};
}
因为我需要做一些过滤,所以我使用了一个计算属性:
computed: {
width_nodes: function() {
var widthnodes = {};
for (var node in this.localnodes) {
if (node.includes("DynamicItem")) {
Vue.set(widthnodes, node, this.localnodes[node]);
}
}
return widthnodes;
}
}
问题
我希望每当我的父组件中的相应数据发生变化时,这个计算属性就会更新。然而事实并非如此。我可以在 vue devtools 中看到更改的数据,但计算的属性并未反映这些更改。这似乎与反应性更改检测警告直接相关,因为如果我将例如 DynamicItem2 添加到我的初始数据中,它会正确更新。
编辑:我如何使用 width_nodes
<tr v-for="(value, name) in width_nodes" :key="name">
<td style="font-weight: bold;">{{ name }}</td>
<td>{{ value }}</td>
</tr>
解决方案
推荐阅读
- android - [Wi-Fi]Android R 无法编辑企业建议网络
- javascript - 承诺错误:非法参数:函数字符串
- javascript - 需要有关画布加载图像的帮助
- nginx - 在没有上下文路径的情况下运行的两个 tomcat 上的 NGINX 负载平衡
- javascript - react-native 中 empy <> 片段的主要好处是什么?
- reactjs - onSubmit 不适用于多行文本输入
- docker - docker上的Gitlab:如何处理动态IP?
- javascript - 更改计算器功能不起作用(Javascript)
- python - 如何在 Python 中限制 fstring 中的位数
- android - 我无法通过带有 android studio 的 FCM 发送推送通知