前提・実現したいこと
タイトルにある通り、dispatchしてstateが更新された後にコールバックを走らせたいです。
つまり、this.setState(state,() => {/*コールバック処理*/})
このsetStateのコールバックのような使い方をdispatch()
でする方法が知りたいです。
具体的には、this.props.dispatch()を行い、stateが更新されたら、
画面遷移する。という処理がしたいです。
※今回のdispatch()では、前の状態と値が変わらない場合もあります。
類似質問
Is store.dispatch in Redux synchronous or asynchronous
How to trigger off callback after updating state in Redux?
現状
類似質問の解答にある通り、
1.dispatch()は同期処理だよ
2.store.subscribe()を使えばできる
3.redux-thunkを使えばできる
4.redux-sagaを使えばできる
とあります。
が、
1.dispatch()は同期
javascript
1 2componentDidMount(){ 3 this.props.dispatch({type:"USER_DATA",userData:userData}) 4 console.log("dispatch userData:",this.props) 5}
としたときのStoreのuserDataの値はデフォルト値のままでした。
これはdispatch()が同期処理ではないということではないのでしょうか?
2.store.subscribe()
javascript
1store.subscribe(() => { 2 console.log(store.getState()) 3 this.props.navigation.navigate("UserTopView") 4})
これだとstateが更新されるたびによばれてしまう。
今回はuserData
アクションがdispatch()
されたときのみ、コールバックを走らせたいので、subscribe()
で何のアクションがdispatch()
されたのかわからければ無理なのではないか。
3,4.redux-thunk,redux-sagaを利用
調べてみたところ、今回行いたい実装をするにはどのようにすればいいのかわからなかった。
質問
以上のことより、
1.特定のdispatch()
をする。(storeのstateの値が変わらないこともある。)
2.そのdispatch()
の処理が完了した後(storeのstateが変更された後)に画面遷移をしたい(もしstoreのstateが変更しなくても画面遷移をする)
を実現する方法を教えていただきたいです。
足りない情報などコメントで教えていただければ、すぐ対応します。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/11 03:02
2019/11/11 08:37