如何将setIn与immutable.js一起使用List

时间:2016-05-18 09:38:26

标签: immutable.js

好的,我有一个非常标准的对象列表。

const list = Immutable.List([{type:'thang',data:{id:'pants'}}]);

现在我想把裤子换成短裤......所以我在想

list.setIn([0,'data','id'],'shorts');

Error: invalid keyPath

这是怎么做到的?

我甚至无法解决这个问题,尽管有一段时间不知所措:/一旦我知道如何做到这一点,我想知道如何在某个位置添加新元素

list.setIn([0,'data','length'],'short');

将新长度属性添加到列表中位置0的数据对象。

2 个答案:

答案 0 :(得分:2)

我的坏。我在创建Immutable结构时遇到了问题。如果我改变

const list = Immutable.List([{type:'thang',data:{id:'pants'}}]);

const list = Immutable.fromJS([{type:'thang',data:{id:'pants'}}]);

然后我可以

list.setIn([0,'data','id'],'shorts');

答案 1 :(得分:1)

我们的嵌套结构化数据:

#import "myCustomUIViewClass.h"

@implementation myCustomUIViewClass

    - (id)initWithFrame:(CGRect)frame;
    {
        self = [super initWithFrame:frame];
        if (self) {
            self.backgroundColor = [UIColor blueColor];
        }
        return self;
    }
@end

需要不可变

const state = {
  Persons: [
    {
      fname: 'J.R.R',
      lname: 'Tolkin',
    },
    {
      fname: 'jack',
      lname: 'London',
    }
  ]
};

将简单对象转换为地图

const { fromJS } = require('immutable')

从嵌套结构中获取数据

const stateMapped = fromJS(state);

以嵌套结构设置数据

console.log(stateMapped.getIn(['Persons', 0, 'fname']))//output: J.R.R