2017-01-24 12 views
1

私はredux-thunkに問題があります。それは、ディスパッチは私のアクションクリエイターの中の関数ではない、私は返された議論を慰めようとしましたが、何もありません。ここでRedux-thunk - ディスパッチは関数ではありません

コード行く:

アクションところで

export function signUp(data) { 
    return dispatch => { 
    console.log(dispatch) 
    if (data.email === '[email protected]') { 
     dispatch(signIn(data,() => { 
     if (data.type === '2') { 
      browserHistory.push('/settings/profile') 
     } else { 
      browserHistory.push('/') 
     } 
     })) 
    } else { 
     return { 
     type: ActionTypes.USER_SIGN_UP__ERROR 
     } 
    } 
    } 
}` 

mapActionsToProps

const mapActionsToProps = dispatch => ({ 
    signUp (data) { 
    console.log(dispatch) 
    dispatch(userActions.signUp(data)) 
    } 
}) 

を、私はmapActionsToProps内部ディスパッチ関数を慰め見たり、それは次のようになって戻っています:

function (action) { 
    if (typeof action === 'function') { 
     return action(dispatch, getState, extraArgument); 
    } 

    return next(action); 
    } 

答えて

1

ディスパッチはアクション作成者から渡されていないため、機能ではありません。

さらに、mapActionsToProps内にアクションをディスパッチしないでください。接続されたコンポーネントからアクセスできるようにバインドするだけです。

あなたmapActionsToProps

const mapActionsToProps = (dispatch) => { 
    return { 
    asyncAction: bindActionCreators(asyncAction, dispatch), 
    } 
} 

const Container = connect(mapStateToProps, mapActionsToProps)(Component); 

非同期アクション

export const asyncAction = (email) => { 
    return (dispatch, getState) => { 

    const state = getState(); 

    dispatch(StartAsync()); 

    return fetch(`${apiUrl}/endpoint?email=${email}`, { 
     method: 'GET' 
    }) 
     .then(response => response.json()) 
     .then((result) => dispatch(finishedAsync(result)), 
       (error) => dispatch(failedAsync(error))) 
     .catch(e => { 
      console.log('error:', e); 
     }); 
    }; 
}; 

次に、あなたの連結成分には、あなたが小道具からこのアクションをディスパッチすることができます。

+0

実際には、reduxソースコードによれば、「この[bindActionCreators関数]は単にstore.dispatch(MyActionCreators.doSomething())を自分で呼び出すことができるので便利です」とコメントしています。 私はコード構造に大きな違いは見られませんが、他の違いはありますか?おかげで –

+0

あなたは正しいです。私はちょうどbindActionCreatorsに使用されています。 'mapActionsToProps'から関数を返そうとしましたか? – jdrzejb

+0

'CONST mapDispatchToProps =ディスパッチ=> { \tリターン{ \t申し込み:(データ)=> { \tディスパッチ(userActions.signUp(データ)) \t} \t} \t}' – jdrzejb

関連する問題