connect()
メソッドでReduxサンクを使用するときに問題が発生しました。react-reduxです。Redux connect()とReduxサンクを反応させる
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」がコンソールに表示されている:私は、次のコードを持っています。だから 'サンク'は実行されません。
私は明示的にactionCreator()
を派遣する場合、それは動作しません:
const mapDispatchToProps = dispatch => ({
callback: dispatch => dispatch(actionCreator())
});
The Redux docs says this about mapDispatchToPropsを:
オブジェクトが渡された場合、その内部の各機能が Reduxのアクションの作成者
であると想定されます
なぜ、mapDispatchToPropsはありません。dispatch()
私のactionCreator()
?私はReactを始めたばかりなので、それは分かりません。
更新
それがないReduxのから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()'に渡されたパラメータは 'actionCreator()'に渡されません。私は 'bindActionCreators()'が今のところ動作することを発見しました。 –