如何使Vue.js中的值变为非React性?

velaa5lx  于 2022-11-17  发布在  Vue.js
关注(0)|答案(4)|浏览(125)

在我的Vue.js应用程序中,我有一个数组值,它应该只在用户完成一个特定的“刷新”操作时才更新。但是,只要我为该数组值赋了一个新值,数组值就变成了React性的,并随着赋值中数据的变化而立即改变。数组值应该保持非React性。
例如,我有一个方法refresh(),当它被触发时,就意味着用currentData更新displayedDatadisplayedData不应该是React式的,而currentData应该是React式的。displayedData应该只在调用refresh时更新。

methods: {
    refresh: function() {
        this.displayedData = this.currentData;
    }
}
vnzz0bqm

vnzz0bqm1#

要使一个值不是被动的,而不是静态的,你可以使用stucturedClone()对其进行“深度复制”,从2022年开始,stucturedClone()得到了广泛的支持:

this.displayedData = structuredClone(this.currentData);

另一种广泛使用的方法是使用JSON对其进行编码,然后进行解码:

this.displayedData = JSON.parse(JSON.stringify(this.currentData));

这两种方法都将一个值的当前状态分配给另一个值,并且在再次触发此代码之前,对第一个值的任何更改都不会更改第二个值。
之所以有必要这样做,并不是因为Vue.js的特殊性,而是因为JavaScript的普遍性。在JavaScript中,数组和对象是“通过引用传递”而不是“通过值传递”。

wqsoz72f

wqsoz72f2#

一种方法(不禁用React性)是为临时数据使用不同的阵列,并在用户按下刷新时将内容移动到好的阵列中。
您可以将第一个数组中的值复制到temp数组中,例如createdmounted生命周期函数中的this.temp = this.permanent.slice()
Slice将创建数组的浅层副本。如果您还需要克隆数组中的项,则可以使用一些深层副本库或JSON.parse(JSON.stringify(...))方法。

w7t8yxp5

w7t8yxp53#

如果您不将currentData添加到data()方法中,则它不会是被动的。

export default {
    currentData: [],
    data() {
        return {

        }
    },
    methods: {
        refresh: function() {
            this.displayedData = this.currentData;
        }
    }
}

然后,您仍然可以使用{{ $options.currentData }}引用节中的currentData

相关问题