可能的方法是使用也mergeProps
該合併mapState
和mapDispatch
並允許使用兩者在同一時間。
// Define mapState
const mapState = (state) => ({
needeedValue: state.neededValue
})
// Define mapDispatch
const mapDispatch = (dispatch, ownProps) => {
return {
onChange: (newValue, neededValue) => {
dispatch(updateAttributeSelection('genre', newValue));
dispatch(getTableData(newValue, ownProps.currentYear, neededValue));
}
}
}
// Merge it all (create final props to be passed)
const mergeProps = (stateProps, dispatchProps, ownProps) => {
return {
...stateProps, // optional
...dispatchProps, // optional
onChangeWithNeededValue: (newValue) => (
dispatchProps.onChange(
newValue,
stateProps.needeedValue // <<< here the magic happens
)
)
}
}
// Pass mergePros to connect
const MyContainer = connect(mapState, mapDispatch, mergeProps)(MyComponent);
正式文件:在大型應用程式react-redux#connect
可能的性能缺點:Stack Overflow - Performances and mergeProps in Redux
我認爲真正的使用情況下,用於訪問mapDispatchToProps狀態是知道哪些行爲是在運行時可用。例如,您可以將每個可能的操作映射到函數,並調用它來分派操作或使用if子句對其進行測試,以檢查操作是否可用。 –