通常情況下,您可以訪問父組件發送給子項目的道具。但是,當在子組件上使用redux時,由父節點發送的道具會丟失,並使用將redux狀態與組件道具映射的「connect」方法。訪問道具以及Redux狀態數據發送到組件
如:
聲明與屬性的組件: <A_Component prop1='1' prop2='2' />
訪問無子組件上的終極版,做工精細: this.props.prop1
或this.props.prop2
相同的語句會給undefined
錯誤,如果終極版狀態是用過的。
通常情況下,您可以訪問父組件發送給子項目的道具。但是,當在子組件上使用redux時,由父節點發送的道具會丟失,並使用將redux狀態與組件道具映射的「connect」方法。訪問道具以及Redux狀態數據發送到組件
如:
聲明與屬性的組件: <A_Component prop1='1' prop2='2' />
訪問無子組件上的終極版,做工精細: this.props.prop1
或this.props.prop2
相同的語句會給undefined
錯誤,如果終極版狀態是用過的。
自己的組件道具可作爲mapStateToProps
功能的第二個參數:
// ParentComponent.js
// ... other component methods ...
render() {
return <TodoContainer id="1" />
}
// TodoContainer.js
// `ownProps` variable contains own component props
function mapStateToProps(state, ownProps) {
return {
todo: state.todos[ownProps.id]
};
}
太棒了!完美的作品。 :) –
反應-終極版connect method傳遞道具包裹元件。 connect方法可以接收3種方法:
mapStateToProps
- 創建數據道具mapDispatchToProps
- 創建動作道具mergeProps
- 結合由2種以前的方法, 產生的道具,並增加了父分配道具(ownProps/parentProps)。通常只需要重寫mapStateToProps
和或mapDispatchToProps
,並使用默認mergeProps
(defaultMergeProps
)。
這是defaultMergeProps
方法的定義:
const defaultMergeProps = (stateProps, dispatchProps, parentProps) => ({
...parentProps, // ownProps
...stateProps, // mapStateToProps
...dispatchProps // mapDispatchToProps
})
所以,除非你通過自己的mergeProps
方法來覆蓋defaultMergeProps
,您總能獲得由母公司分配的道具。
btw - mapStateToProps
和mapDispatchToProps
都會收到ownProps,所以他們可以將它們與狀態相結合,並創建新的數據道具/動作道具。
你能提供一些代碼嗎? – Maxx