reactjs - Immutable JS - 如何用新列表替换列表

标签 reactjs redux immutable.js

我有一个使用 Immutability.js 的 React + Redux 应用程序。在我的 reducer 中,我将状态定义为不可变列表

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;

但是,这不会将任何东西推送到我的列表中。为什么这不起作用?适当的方法是什么?我确信有更简单的事情。

提前致谢:)

最佳答案

对任何类型的不可变对象(immutable对象)执行 state.push 都会返回一个新对象。现有状态不会被修改,这就是为什么在推送后返回状态不起作用的原因。一个快速的方法是将 state.push(newResponse); 更改为 state = state.push(newResponse);。我建议您阅读更多有关不可变结构如何工作的内容:)

关于reactjs - Immutable JS - 如何用新列表替换列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725361/

相关文章:

javascript - JavaScript中如何将对象中所有元素的类型(typeof)分配给变量 | typescript ?

redux - 在 Redux 中存储列表中选定项目的模式

javascript - Immutable.js:如何通过指定属性值在数组中查找对象

javascript - 扩展深层嵌套 prop 中的属性 ImmutableJS

javascript - React js中默认为数组的每个对象设置一个属性

reactjs - 为什么这个日期总和在 react 中没有正确显示?

reactjs - 如何使用 material-ui 网格系统将 5 个项目均匀地组织成一行?

ruby-on-rails - XMLHttpRequest 无法加载 http ://localhost:3000/players/1. 预检响应具有无效的 HTTP 状态代码 404

Javascript 匿名函数与无函数

javascript - 为什么 2 个 immutable.js 列表有很大不同?