繁体   English   中英

为什么redux状态没有映射到反应状态?

[英]Why is redux state not mapped to react state?

我对React-Redux非常新,遇到了一个名为mapstatetoprops的方法。

但是为什么redux状态没有映射到反应状态? 为什么它映射到道具呢?

在React中,state属于组件,而props从它的父级传递给组件。 mapStateToProps()是一个在connect()内部使用的函数,用于connect()数据从Redux存储传递到组件。

状态和道具之间的区别: https//codeburst.io/react-state-vs-props-explained-51beebd73b21

如果要在组件的状态下使用Redux存储中的数据,组件首先需要将其作为prop来接收。 然后,您可以将其映射到getDerivedStateFromProps的组件状态。 https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops

当您以这种方式从props派生状态时,更新组件的状态不会更改Redux状态。

主要原因(我认为):

“哑”组件仅处理属性,而不处理状态。

“愚蠢”组件的一个动机是它们很容易测试:你需要做的就是传递道具。 这意味着无论道具来自哪里,你唯一能测试的就是他们用任何道具做出正确的事情。

将redux存储映射到属性强化了这一概念。 一旦你引入组件状态,你就必须玩更多(一些简单的)游戏来测试组件,但它并不像纯组件那样直截了当。

因为这是Redux工作流程。

如果没有redux,则使用本地状态(组件状态)并将数据通过父级传递给子级,这使得当您有更多组件时数据共享非常困难。

ComponentOne有要传递给组件4的数据:

ComponentOne -> ComponentTwo -> ComponentThree -> ComponentFour

使用Redux,你有一个商店,但不能用作对象(getter和setter),你将它的内容映射到需要每个属性的组件。

Redux场景:

store {userName: "user", otherData...}

仪表板

function mapStateToProps(state) {
    return {
        userName : state.userName
}

这样,组件将侦听userName更改,但只能通过mapDispatchToProps更改存储中的数据。 这样,确保了单一真实反应原则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM