我对React-Redux还是很陌生,遇到了一种名为 mapstatetoprops 的方法。
但是为什么redux状态没有映射到反应状态?为什么将它映射到道具呢?
答案 0 :(得分:2)
在React中,状态属于组件,而props从其父级传递到组件。 spark.sql("SELECT from_unixtime(unix_timestamp(substr(time, 1, 23), 'dd.MM.yyyy HH:mm:ss.SSS')) AS timestamp, cast(regexp_replace(column_"COLUMN_NAME"",',','.') as float) AS Column FROM table")
是在mapStateToProps()
内部使用的函数,用于将数据从Redux存储传递到组件。
状态与道具之间的区别:https://codeburst.io/react-state-vs-props-explained-51beebd73b21
如果您想在组件状态下使用Redux存储中的数据,则组件首先需要将其作为道具接收。这样,您就可以将其映射到connect()
中组件的状态。 https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops
以这种方式从props导出状态时,更新组件的状态不会更改Redux状态。
答案 1 :(得分:1)
主要原因(如我所见)
“哑巴”组件仅处理属性,而不处理状态。
“笨拙”的组件的动机之一是它们很容易测试:您需要做的就是传递道具。这意味着无论您测试的是什么道具,只要它们在给定的道具下都做对了。
将redux存储映射到属性加强了这一概念。一旦介绍了组件状态,您就必须玩更多(一些简单的)游戏来测试组件,但是它不像纯组件那样简单。
答案 2 :(得分:1)
这是Redux工作流程。
当不使用redux时,您使用本地状态(组件状态)并将数据通过父级传递给子级,那么当您拥有更多组件时,这将使数据共享变得非常困难。
ComponentOne具有要传递给组件4的数据:
ComponentOne -> ComponentTwo -> ComponentThree -> ComponentFour
使用Redux时,您有一家商店,但是不能将其用作对象(获取器和设置器),而是将其内容映射到需要每个属性的组件。
Redux场景:
store {userName: "user", otherData...}
仪表板
function mapStateToProps(state) {
return {
userName : state.userName
}
通过这种方式,组件将侦听userName
的更改,但只能通过 mapDispatchToProps 更改存储中的数据。这样,可以确保Single Source of Truth React原理。