我有一个React + Redux应用程序,它使用Immutability.js。在我的还原器中,我将状态定义为不可变列表。
const initialSuggestedResponseState = Immutable.List([]);
每次发生特定的操作时,我都想用一个新的列表来替换这个列表。我想我错过了Immutability.js的一些东西,因为我还没有找到一个可行的解决方案。到目前为止,我已经尝试过这样的方法:
state.clear();
action.messages.forEach(message => {
let newResponse = new suggestedResponseRecord({
body: message.body,
responseId: message.response_id,
type: message.type
});
state.push(newResponse);
});
return state;然而,这并没有将任何事情推到我的列表中。为什么这不起作用,合适的方法是什么?我肯定还有更简单的事情。
(预先谢谢:)
发布于 2016-11-21 16:55:46
对任何类型的不可变对象执行state.push将返回一个新对象。现有的状态没有被修改,这就是为什么在推到状态后返回状态的原因。一个快速的黑客就是将state.push(newResponse);转换为state = state.push(newResponse);。我建议你多读一些关于不可变结构是如何工作的:)
发布于 2016-11-21 17:06:23
作为zackify答案的后续,这里有一种简化代码的方法:
return new List(action.messages.map(message => {
return new suggestedResponseRecord({
body: message.body,
responseId: message.response_id,
type: message.type
});
});这将从消息数组(使用Array.prototype.map)创建一个记录数组,然后将该新数组转换为不可变列表。不确定这是否是最有效的方法,但它是相当可读的。
https://stackoverflow.com/questions/40725361
复制相似问题