是否可以在 React-Redux 应用程序中使用 Immutable.js 来比较 shouldComponentUpdate 中的道具?

Posted

技术标签:

【中文标题】是否可以在 React-Redux 应用程序中使用 Immutable.js 来比较 shouldComponentUpdate 中的道具?【英文标题】:Would it be possible to utilize Immutable.js in a React-Redux Application for comparing props in shouldComponentUpdate? 【发布时间】:2017-01-29 18:01:02 【问题描述】:

我目前正在开发一个 React-Application,我在 Redux-Reducers 中使用 Immutable.js。如果他们没有更改之前的状态(如推荐的那样),reducers 将返回之前的状态作为参考。 如果我现在将前一个状态与下一个状态 (state===nextState) 进行比较,它将返回 true,因为引用没有改变,对吧?

现在如果 reducer 改变了状态,它会返回一个新的 Immutable.js Map。

现在做同样的比较会返回 false,因为它是一个新地图。

以某种方式检测 shouldComponentUpdate 中的 prop 更改是否合理?

如果是这样,有没有办法修改 react-redux 连接函数以使用我自定义的 shouldComponentUpdate 方法?因为显然不可能将 Immutable.js 对象作为道具传递给组件。

【问题讨论】:

欢迎来到 SO。我们更喜欢可以回答的问题,而不仅仅是讨论。请访问帮助中心并拨打this tour 了解要问什么以及如何问。 【参考方案1】:

在 mapStateToProps 中,如果您不将此不可变迭代转换为等效的 JS 对象并按原样传递不可变对象。你可以做到的。

例如:

代替

const mapStateToProps = (state) => ( ...(state.toJS()) );

从组件中的状态访问任何数据的方式:this.props.data

你也可以写成:

const mapStateToProps = (state) => ( state );

从组件中的状态访问任何数据的方式:this.props.state.get('data')

【讨论】:

以上是关于是否可以在 React-Redux 应用程序中使用 Immutable.js 来比较 shouldComponentUpdate 中的道具?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-redux 中调用页面刷新的函数?

React-redux 操作没有被调度

我的 react-redux 项目中的 css 来自哪里

React Hooks 与 React-redux

如何使用react-redux将redux商店中封装的ui状态映射到道具?

在 react-redux 应用程序中使用 JSONP