【发布时间】:2019-06-22 10:16:14
【问题描述】:
我有一个像这样的 VueJS 组件
const MyComponent = Vue.extend({
props: ["myHandle"],
computed: {
name: {
get: function() { return myHandle.getName() },
set: function(newName) { myHandle.setName(newName) },
}
}
})
问题是设置计算属性name不会触发VueJs更新属性。这意味着旧名称是在重新渲染时显示的内容。
现在,我对 VueJS 还很陌生,我可以看出这可能是代码异味,但问题是 myHandle 属性实际上是一个句柄,用于访问用 rust 编写的 WebAssembly 模块中的数据。 rust 代码是我的大部分状态/模型/真相来源所在的地方。
目前我发现的两个不满意的解决方案是:
使用方法而不是计算属性来检索名称。基本上将
getName方法添加到我的组件并将我的模板代码从<p> Your name is {{ name }}</p>更改为<p> Your name is {{ getName() }}</p>。这将导致 VueJs 不缓存。将来我计划进行昂贵的计算,这意味着不必要的性能成本将状态从 rust 复制到我的组件。我不想这样做,因为我会得到多个事实来源。
那么有没有办法:
A:让 VueJS 了解 myHandle.setName 是一种变异方法,应该会导致 name 计算属性被更新。
B:手动触发更新。
C用其他方式解决?
【问题讨论】:
标签: javascript vue.js