immutable,updateIn给出无效的keyPath

时间:2016-02-22 21:00:15

标签: javascript immutable.js

我在我的redux应用程序中实现了不可变,并且遇到了updateIn函数的问题。在我的reducer中,我有一个切换,我想用这个动作打开和关闭。逻辑是这样的:

     case actions.ADMIN_TOGGLE_SETTING:
            console.log("hit toggle", action);
            console.log("state", state.toJS());
            return state.updateIn(['toggleSettings', action.name], (oldValue) => !oldValue);

所以这给我一个Uncaught Error: invalid keyPath的控制台错误。我不知道为什么,因为运行state.toJS()的控制台日志如下所示:

{
    toggleSettings : {
        svl : true
    }  
}

并且action.name是" svl"。所以我想也许action.name是问题?但它正确传递,它看起来像这样:

  {type: "ADMIN_TOGGLE_SETTING", name: "svl" }

任何建议都会很棒。谢谢!

2 个答案:

答案 0 :(得分:4)

updateIn方法只适用于immutable.js数据结构,因此如果发出Uncaught Error: invalid keyPath,则可能是您的数据结构:

{
  svl: true
}

是一个普通的JavaScript对象而不是immutable.js数据结构,尝试使用Immutable.Map进行转换。

答案 1 :(得分:0)

像这样:(oldValue=action.name)=>!oldValue