2017-01-03 142 views
3

我已閱讀此主題。 What is the difference between state and props in React?Redux與React-Native和mapStateToProps

它說,道具是不同的國家和理想的道具不應該改變其組件,只應改變其父組件。

然而,react-redux中的mapStateToProps函數將Redux中的狀態映射到React組件的道具,當Redux狀態被Redux動作改變時,它基本上改變了React組件的道具。

這對我沒有意義。它似乎應該是mapStateToStates而是將Redux狀態映射到React組件的狀態。

我錯過了什麼嗎?

回答

6

它說,道具都來自不同的國家和理想的道具應該 不能在其組成的變化,只應該由它的 父組件來改變。

此處的狀態指的是組件內部狀態,組件可通過.setState()在內部更改該組件。

然而,mapStateToProps功能在反應-Redux的映射狀態在終極版 到反應的組分,當Redux的狀態由終極版作用而改變其基本上改變 的道具陣營組分的道具。

這裏的狀態指的是redux store,一個外部狀態。 react-redux的connect方法創建一個HOC高階組件(一個知道商店狀態變化的組件)。 HOC包裝愚蠢的反應組件,它不知道商店。使用mapStateToProps HOC映射來自外部狀態的數據,並通過道具將其注入反應組件。在HOC> mapStateToProps - -

在終極版存儲狀態>道具傳遞給啞組件

所以HOC是父,啞巴成分是孩子。父母將新的道具注入到子組件中,並且第1個斷言「道具不應在其組件中更改,只應由其父組件更改」不會被違反。


注:有關高階組件

  1. 更多信息可以在丹·阿布拉莫夫的文章約Presentational and Container Components被發現。

  2. 要了解如何反應,Redux的連接工程 - 在網上免費課程,Getting Started with Redux,丹阿布拉莫夫展示瞭如何從頭開始建立連接(教訓22-29)

+0

感謝提到HOC。看起來像'connect'方法創建一個HOC,它是一個包裝器(或父組件),它可以改變它的子組件(或連接的組件)的道具。這說得通!我的理解是否正確? – gpminsuk

+0

確實如此:)如果你想在一點 - 在線免費課程,[Redux入門](https://egghead.io/courses/getting-started-with-redux),Dan Abramov build從頭開始連接(課程22-29)。 –

0
  1. state在這裏mapStateToProps意味着stateReduxStore

  2. 它地圖ReduxstateReactComponentprops。不一定要將道具映射到狀態,例如Pure Component

0

mapStateToProps使用react-redux connect()函數將狀態作爲道具傳遞給組件。考慮connect()函數作爲包裝器組件,它將道具傳遞給兒童。

    mapStateToProps 
connect (state) -----------------------> component(props)