2017-08-22 37 views
0

我想通过一个内部items添加新键值对的对象一个下面给出:如何深入添加新的键值对对象内不可变的Js地图在REDX ..?

{ 
    appElements: { 
    layers: { 
     layer_1: { 
     background: { 
      width: '100px', 
      height: '100px', 
      bgColor: '#aaaaaa', 
      bgImage: 'http:bgimage1.png' 
     }, 
     items: { 
      yrgroih9: { 
      width: '100px', 
      x: '200px' 
      }, 
      qhy0dukj: { 
      width: '100px', 
      x: '200px' 
      }, 
      '7lw2nvma': { 
      width: '100px', 
      x: '200px' 
      } 
     } 
     } 
    } 
    } 
} 

代码用于增加内部items新的对象:

case 'ADD_OBJECT': 
    return state.setIn(["appElements","layers","layer_1","items"],{ 
    [action.objData.item_id]: { 
     "width": action.objData.width, 
     "x": action.objData.x 
    }, 
    }); 

第一项对象尝试添加里面的items作品完美:

yrgroih9: { 
    width: '100px', 
    x: '200px' 
} 

排列的redux存储数据(从chrome redux devtools): enter image description here

但添加另一个对象将删除的第一个条目,并添加当前条目。

也试过updateIn函数,它不工作。

如何添加对象而不删除旧的。

+0

是否有你的对象的任何错别字? 'layer_1'和'items'应该是一个数组。你能更新正确的对象结构吗? –

+0

有没有基于数组的索引..只有对象的键值对,这是我添加的正确的对象结构...我已经添加了REDX存储对象作为图像文件,以便更好地理解..帮助我.. – ArunValaven

+0

所以这就是在哪里错误进入,你没有'qhy0dukj'或'7lw2nvma',因为这些被忽略。 'items'将'yrgroih9'作为关键字,它只有一个关键字,因为它是一个散列。 –

回答

0

应该是这样的:

return state.setIn(
    ["appElements","layers","layer_1","items", action.objData.item_id], 
    fromJS({ 
     "width": action.objData.width, 
     "x": action.objData.x 
    })); 
+0

谢谢..它的工作.. @thedude ...但需要添加括号“)”为您的答案中的setIn函数.. – ArunValaven

相关问题