将整个全局状态传递给“ mapStateToProps”

时间:2018-08-19 13:48:48

标签: reactjs redux react-redux

我想将整个全局状态传递给redux connect'mapStateToProps'函数

在我的组件内部,我只能访问现在是全局状态的状态。

这有什么问题吗?

我不想将状态切成很多块并将其切成每个组件,而只是给出整个全局状态。

这是否存在任何性能问题?我知道它可以重新渲染整个组件,但是用react的diffing算法,我想应该没问题。

使用'this.props.count'不像'this.props.todoSection.count那样具有启发性。只是易读性。

我读到React 1.6中的“时间切片api”可能会改善与维护全局状态有关的各种性能问题。

https://auth0.com/blog/time-slice-suspense-react16/

3 个答案:

答案 0 :(得分:3)

从技术上讲是可行的,但是更好的做法是在每个使用全局状态的组件中创建mapToStateProps。并在其中映射唯一需要的道具。

答案 1 :(得分:2)

然后呢?每当状态发生任何变化时,无论它是否与您的组件相关,或者组件是否会重新呈现?

您为什么要这样的东西? (很好奇)

答案 2 :(得分:1)

听起来像您不想想要映射整个全局状态,只是想映射相关的化简器。因此,您当然可以可以映射那家商店:

const mapStateToProps = ({ todoStore }) => ({ todoStore });

这比映射整个商店的成本要低得多,但是如果商店足够大(和/或最终用户的浏览器不够灵活),则大规模地开始会在整个应用程序中引起性能问题。充其量是反模式。


  

使用this.props.count并不像进行this.props.todoStore.count那样具有启发性。只是可读性。

可以始终使用名称空间,同时仍然仅映射所需的数据:

const mapStateToProps = ({ todoStore: { count, foo } }) => ({ todoStore: { count, foo } });

这将为您提供所需的形状,而仅连接所需的状态。但是,伴随着重复属性名称的开发人员付出了微不足道的代价-而且仍然需要定义要映射的状态-可能会违背目的。