如何将新值添加到不可变列表的不可变映射中?

时间:2018-04-17 07:05:12

标签: javascript immutable.js

以下是我的代码

 // messageList is a Immutable List
 const newMessage: any = messageList.map((msg: any) => {
            msg.set('name', 'bbb');
        });

但我得到了

msg.set is not a function

在控制台中。

出了什么问题?

1 个答案:

答案 0 :(得分:0)

一种方法是遵循以下步骤:

来自docs:使用set()

为Map添​​加新的键/值对
const updatedMap = oldMap.set(key, value)

实施例

const avengersMap = Immutable.Map({
  ironMan: 'Tony Stark',
  captainAmerica: 'Steve Rogers'
});

const moreAvengers = avengersMap.set('blackWidow', 'Natasha Romanov');

打字稿也是如此。

(Example ref)

有些注意事项:正如您可能知道的那样,您无法修改不可变列表,因此.map上面的.map不会让您更新列表中的元素。您必须创建一个包含已修改元素的新列表。

列表更新示例(来自反应减速器):

function fn(state) { 
     targets = state.get('targets');
     targets = targets.push(action.data);
     return state
          .set('targets', targets)
}