【发布时间】:2018-05-13 03:18:51
【问题描述】:
在我的基于 Vue.js/Vuex 的应用程序中,我使用这个突变来重置部分 Vuex 状态:
restartGame(state) {
state.gameRunning = true
state.camera = {
position: {
x: 0,
y: 10,
z: 0
},
moveForward: false,
moveBackward: false,
moveLeft: false,
moveRight: false,
velocity: {
x: 0,
z: 0
},
mouseMovement: {
x: 0,
y: 0
},
rotation: {
x: 0,
y: 0
}
}
}
这样,一切正常,但写出整个相机状态对我来说似乎很冗长。所以我将初始相机状态提取到一个单独的文件中:
initialCameraState.js
export default {
position: {
x: 0,
y: 10,
z: 0
},
moveForward: false,
moveBackward: false,
moveLeft: false,
moveRight: false,
velocity: {
x: 0,
z: 0
},
mouseMovement: {
x: 0,
y: 0
},
rotation: {
x: 0,
y: 0
}
}
我已经像这样重构了 resetGame() 突变:
import initialCameraState from './initialCameraState'
restartGame(state) {
state.gameRunning = true
state.camera = initialCameraState
}
但不知何故,这不起作用,Vuex 商店没有更新,但似乎保持不变。这怎么可能?
我还使用initialCameraState.js 设置(部分)Vuex 商店的初始状态。我的第一个想法是,当改变状态的相应部分时,initialCameraState 也被改变了。这可以解释resetGame() 没有显示任何效果。所以我尝试在 initialCameraState.js 被导入/使用的两个地方都使用对象扩展运算符,但这并没有解决问题。
【问题讨论】:
标签: javascript vue.js vuex