matchDispatchToProps
不是react-redux
中的標準參考。我會給你一個關於connect HoC如何工作的概述。
connect
HoC需要四個參數; mapStateToProps
,mapDispatchToProps
,mergeProps
和options
。在mapStateToProps
分配你想在你的商店什麼樣的信息是可用的組件內部如下:
mapStateToProps = (state) => ({
user: state.user
});
在mapDispatchToProps
您提供的功能道具,你的組件可以訪問您的商店的dispatch
方法如下:
mapDispatchToProps = (dispatch) => ({
updateUser: (user) => {
dispatch(updateUser(user));
}
});
注意:updateUser
是你做了一個actionCreater
。
你會再與connect
HOC使用它們如下:
MyConnectedComponent = connect(mapStateToProps, mapDispatchToProps)(MyComponent);
現在你可以使用<MyConnectedComponent />
和的<MyComponent />
代碼中,你可以訪問({ user, updateUser })
屬性。
注意:connect
可以採取null
參數爲好。 connect()(Component)
將使dispatch
作爲道具在您的組件中可用。這是沒有任何參數的默認設置。您也可以connect(null, mapDispatchToProps)(Component)
在組件中製作updateUser
作爲道具,而不必將組件連接到商店。如果您想要從商店中訪問user
,您也可以connect(mapStateToProps)(Component)
,但不需要從組件內派發。
附加信息
[mergeProps(stateProps,dispatchProps,ownProps):道具](功能):
如果指定,它被傳遞的mapStateToProps(),mapDispatchToProps結果()和父項道具。您從它返回的普通對象將作爲道具傳遞給包裝組件。你可以指定這個函數來根據道具選擇一個狀態片段,或者將動作創建者綁定到道具上的特定變量。如果省略,則默認使用Object.assign({},ownProps,stateProps,dispatchProps)。
[選項(對象)
如果指定,進一步定製連接器的行爲。除了可通過到connectAdvanced()的選項(見下文的那些),連接()接受這些附加選項:
[純](布爾值):如果爲真,連接()將避免重新呈現和如果相關的狀態/道具對象基於它們各自的相等性檢查保持相等,則調用mapStateToProps,mapDispatchToProps和mergeProps。假定包裝組件是一個「純粹」組件,並且不依賴於除道具和所選Redux商店狀態以外的任何輸入或狀態。默認值:true
[areStatesEqual](功能):純粹時,將傳入存儲狀態與其以前的值進行比較。默認值:strictEqual(===)
[areOwnPropsEqual](功能):純淨時,將傳入的道具與先前的值進行比較。默認值:shallowEqual
[areStatePropsEqual](功能):純粹時,將mapStateToProps的結果與其以前的值進行比較。默認值:shallowEqual
[areMergedPropsEqual](功能):純粹時,將mergeProps的結果與其先前的值進行比較。默認值:shallowEqual
[storeKey](String):從哪裏讀取商店的上下文的關鍵字。如果您處於擁有多個商店的不可取的位置,您可能只需要這些。默認值:'store'
完整說明可在reactjs/react-redux找到。
你是什麼意思的差異?這兩種情況導致同樣的事情... – Ale
所以應該有一些差異來創建兩種方式。取決於情況的一些好處和缺點。 – subhajit
@subhajit你瞭解Javascript中的函數和箭頭函數的區別嗎?如果你不這樣做,那麼在提出這樣一個廣泛的問題之前,你真的應該閱讀基本的ES6 Javascript。請參閱[我如何提出一個好問題?](https://stackoverflow.com/help/how-to-ask) –