不可变的js更新深层结构

时间:2016-08-02 17:03:45

标签: javascript reactjs redux immutability immutable.js

我收到了无效的密钥路径'尝试更新我的结构时出错:

state = fromJS({
  cmsData: {
    "pages": [
      {
        "name": "page1",
        "content": {
          "header": "Example header",
          "intro": "Example intro",
          "body": "Example body",
        }
      }
      ...
}

我尝试更新pages数组中的值,使用:

state.setIn(['cmsData', 'pages', index, 'content', title], value)

index是一个数字,title是一个字符串,value也是一个字符串。

我可以通过以下方式创建一个新项目:

state.setIn(['pages', index, 'content', title], value)

然而,只要我尝试访问主要' cmsData'对象然后我得到一个错误。

------ ------ UPDATE

我最初设置cmsData对象而不是初始状态

state.set('cmsData', data)

如果我确实将对象作为初始状态,它可以正常工作。但是,在设置之后尝试更新会产生无效的密钥路径

----- -----解

我使用的是mergeDeep而不是设置初始数据!

state.mergeDeep({ 'cmsData': data })

3 个答案:

答案 0 :(得分:0)

你能再来一次吗?我尝试了你的代码,似乎工作正常。

stomp_interface

我刚刚执行了这个语句,它返回了一个预期的对象。

以下是link to jsbin

答案 1 :(得分:0)

您的新项目创建setIn似乎在cmsData级别。不知道为什么会影响其他访问,但也许你还没有创建你认为你拥有的东西,所以当该项目不存在于该keypath时(即在cmsData中),这是错误的

答案 2 :(得分:0)

我使用的是mergeDeep而不是设置初始数据!

on_checkBox_clicked