背景:我正在开发一个音乐应用程序,它将有多个“场景”,每个都包含“轨道”的集合(类似于Ableton Live)。当我添加一个新场景时,新场景会以某种方式显示第一个场景中的所有轨道。这反映在Vuex状态(根据DevTool),而不仅仅是渲染。 (此外,如果用户更新第一个场景上的曲目,新场景中的曲目也会相应地改变。)本能地,这感觉就像是一个错误的传递类型,我一直在努力尝试找到它。
但真正让我感到惊讶的是:
actions: {
setUpNewScene: context => {
let newScene = JSON.parse(JSON.stringify(context.state.newSceneDefaults))
console.log(context.state.newSceneDefaults)
console.log(JSON.parse(JSON.stringify(context.state.newSceneDefaults)))
console.log(newScene)
// etc...
以下是用户点击“添加新场景”按钮时调用的操作的开头。 前两个 console.logs
准确地给出了您所期望的内容:一个与newSceneDefaults
完全相似的对象,因为它们处于状态(.tracks: [],
)。然而,第三个console.log
,将加上第一个场景中的曲目。
这非常令人费解。这就好像不知何故newScene
引用了以后的值,即使在代码中它似乎是顺序执行的。是否有可能在Vuex的内部工作中发生这种情况?否则,可能导致这种行为的原因是什么?
我意识到在没有看到更多代码的情况下很难诊断问题,这就是我在这里专注于console.log的原因。但是,当然,如果你遇到过这样的情况并且有更多一般性的建议来解决它,我全都听见了。谢谢!