從react-redux使用Redux thunk與connect()
方法時遇到問題。我有以下代碼:React Redux連接()與Redux thunk
function Component(props) {
return (
<button onClick={props.callback}>Click here</button>
);
}
function actionCreator() {
console.log('#1');
return dispatch => console.log('#2'); // = thunk
}
const mapDispatchToProps = dispatch => ({
callback: actionCreator
});
export const Container = connect(null, mapDispatchToProps)(Component);
當我渲染Container
組件,然後單擊該按鈕時,被顯示在控制檯中唯一的「#1」。所以'thunk'不會被執行。
當我明確地派遣actionCreator()
,它的工作:
const mapDispatchToProps = dispatch => ({
callback: dispatch => dispatch(actionCreator())
});
The Redux docs says this about mapDispatchToProps:
如果一個對象傳遞,它裏面的每個功能將被假定爲 一個終極版行動的創建者
那麼爲什麼mapDispatchToProps不是dispatch()
我的actionCreator()
?我對React很陌生,所以也許我不明白它的意思嗎?
更新
當使用bindActionCreators()
從終極版,它的工作:
const mapDispatchToProps = dispatch => {
return bindActionCreators({
callback: actionCreator
}, dispatch);
};
這是與connect()
結合actioncreators正確的方法是什麼?
感謝您的回答。我已經將redux-thunk作爲中間件加入了我的商店。你的代碼不起作用。它在組件裝入時直接分派actionCreator。當我然後單擊按鈕我得到錯誤「this.props.callback不是一個函數」 –
你是對的,我現在發現真正的問題。改變'mapDispatchToProps'函數爲 'const mapDispatchToProps = dispatch =>({callback:()=> dispatch(actionCreator())});' 它應該可以工作。我已經編輯了我的答案,以反映並解釋爲什麼這是必要的! – mxstbr
再次感謝。問題在於'callback:dispatch => dispatch(actionCreator())'確實有效。但是,傳遞給'callback()'(從組件)的params不會被傳入'actionCreator()'中。我發現'bindActionCreators()'現在工作。 –