Vuex操作中的console.log行为非常奇怪

时间:2018-04-26 04:07:54

标签: javascript vue.js

背景:我正在开发一个音乐应用程序,它将有多个“场景”,每个都包含“轨道”的集合(类似于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的原因。但是,当然,如果你遇到过这样的情况并且有更多一般性的建议来解决它,我全都听见了。谢谢!

0 个答案:

没有答案