【发布时间】:2021-05-02 19:26:52
【问题描述】:
环境
我们有一个使用 Vue 2 的 Vue Cli。已安装 Vuex 和 TypeScript
问题
目前我们正在获取一些 vuex 状态数据(通过 vuex getter)。然后使用它。但是,如果我们改变“获取的数据”,它会影响 vuex 状态。看起来很疯狂!这是一个非常愚蠢的服务模块精简版:
// vuex
import { mapState } from 'vuex'
// store
import store from './../store';
// types
import { ServiceType } from './../types/services'
export default class TestService implements ServiceType {
serviceFunction(someArray: Array<number>) {
// this will return some nested/multidimensional data:
// [
// { prop: [[1, 2, 3, 4]] }
// ]
let data = store.getters['getTestStoreData']
data[0].prop[0] = someArray // doesn't mutate the state
data[0].prop = [someArray] // mutates the state
data[0].prop.splice(0, 1, someArray) // mutates the state
}
}
非常精简的吸气剂看起来像这样:
getTestStoreData(state) { return state.data }
所以上面 3 个中的 2 个会改变 store,因为它们会改变 data 变量......这让我相信 getter 传递了状态数据的引用。
有人对此有所了解吗?或者知道处理它的好方法吗? 我有一些关于仅从商店传递嵌套数据的想法。 stackoverflow answer 是我发现的一些最佳见解。
【问题讨论】:
标签: javascript vue.js vuex getter vue-cli