在我的Vue.js应用程序中,我有一个数组值,它应该只在用户完成一个特定的“刷新”操作时才更新。但是,只要我为该数组值赋了一个新值,数组值就变成了React性的,并随着赋值中数据的变化而立即改变。数组值应该保持非React性。
例如,我有一个方法refresh()
,当它被触发时,就意味着用currentData
更新displayedData
,displayedData
不应该是React式的,而currentData
应该是React式的。displayedData
应该只在调用refresh时更新。
methods: {
refresh: function() {
this.displayedData = this.currentData;
}
}
4条答案
按热度按时间vnzz0bqm1#
要使一个值不是被动的,而不是静态的,你可以使用
stucturedClone()
对其进行“深度复制”,从2022年开始,stucturedClone()
得到了广泛的支持:另一种广泛使用的方法是使用JSON对其进行编码,然后进行解码:
这两种方法都将一个值的当前状态分配给另一个值,并且在再次触发此代码之前,对第一个值的任何更改都不会更改第二个值。
之所以有必要这样做,并不是因为Vue.js的特殊性,而是因为JavaScript的普遍性。在JavaScript中,数组和对象是“通过引用传递”而不是“通过值传递”。
wqsoz72f2#
一种方法(不禁用React性)是为临时数据使用不同的阵列,并在用户按下刷新时将内容移动到好的阵列中。
您可以将第一个数组中的值复制到temp数组中,例如
created
或mounted
生命周期函数中的this.temp = this.permanent.slice()
。Slice将创建数组的浅层副本。如果您还需要克隆数组中的项,则可以使用一些深层副本库或
JSON.parse(JSON.stringify(...))
方法。w7t8yxp53#
如果您不将currentData添加到data()方法中,则它不会是被动的。
然后,您仍然可以使用
{{ $options.currentData }}
引用节中的currentDatassgvzors4#
您可以使用解构赋值:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment?retiredLocale=it
您将使用第一个