2017-07-03 13 views
0

mapDispatchToProps内でアクションを結合しようとしています。データを取得しようとした後、モーダルダイアログを起動しました。しかし、私は続ける未定義のプロパティ 'then'を読み取ることができませんエラー。Redux:未定義のプロパティ 'then'を読み取ることができません

誰かが私に説明してもらえますか、私は何を間違っていますか?

mapDispatchToProps:

const mapDispatchToProps = dispatch => ({ 
    onClick: id => { 
    // console.log(fetchThing(id)) returns undefined 
    dispatch(fetchThing(id)).then(() => { 
     dispatch(showModal()) 
    }) 
    } 
}) 

Reduxのアクション:あなたはredux-thunkを使用していないのはなぜ

export const fetchThing =() => { 
    const request = axios.get(URL_API) 

    return dispatch => { 
    request.then(response => { 
     dispatch({ type: ACTION_FETCH, payload: response.data }) 
    }) 
    } 
} 
+1

なぜあなたはディスパッチ内で非常に多くの派遣を持っていると、なぜあなたがランダム関数の結果を派遣しているのですか?通常、減速機は非同期呼び出しのない純粋な関数でなければなりません。おそらく、ディスパッチが何をしているかを見るために、完全なファイルを投稿してください。 –

答えて

0

?それを使えば、そのようなあなたの行動を記述することができます。

export const fetchThing = dispatch => axios.get(URL_API) 
    .then(response => dispatch({ type: ACTION_FETCH, payload: response.data })) 

Redux thunkミドルウェアはあなたのためにすべてのものを行うだろうと、あなたは毎回あなたがmapDispatchToProps内で非同期のアクションを必要とすることを行う必要はありません。

0

mapDispatchToPropsに副作用があってはなりません。これは、名前が示唆しているようにして、犠牲にする行動をとらえなければならない。これは、次のようになります。あなたの(おそらく)ボタンで次に

const mapDispatchToProps = { 
    fetchThing: yourAction.fetchThing, 
    showModal: yourAction.showModal, 
}; 

export default connect(null, mapDispatchToProps)(YourComponent); 

<button type="button" onClick={this.handleClick} /> 

// this can be an asynchronous function, or you can just handle it in the action. 
handleClick = async id => { 
    await this.props.fetchThing(id); 
    this.props.showModal(); 
}; 
+0

好きなものを使用できます(例: '.then'など – DKo

関連する問題