前提・実現したいこと
react-reduxとredux-actionsを使った非同期処理について質問です。
superagentのget通信で得たデータをredux-actionsのcreateAction()という機能を使ってreducer側にデータを渡したい。
前提:
・非同期処理を許可するためmiddlewareの許可をするためのredux-thunkを利用
・reducerはcombinereducerで結合済み
発生している問題・エラーメッセージ
下記component/todoでdispatch後 action/index.jsにある処理までは動くが createActionの処理が動いても reducer/taskの中にあるhandleactionの[test]の所に処理が動いてくれない
該当のソースコード
javascript
1action/index.js 2------------------------------------------------------- 3//import系は省略 4export function test(){ 5 return async () => { 6 console.log('return asyncに入りました。'); 7 const response = await request.get(root) 8 const res = response.body.message; 9//get通信のデータは正しく取得できています。 10 console.log('responseのなかみ'+response.body.message); 11 createAction('TEST', (message) => ({message:message = res})); 12 } 13}; 14 15 16reducer/task 17------------------------------------------------------- 18//import系は省略 19const initialState = {//関係のないものは省略しています。 20 Test: [{ 21 message:'default' 22 }], 23} 24 25 26const task = handleActions(//これが動いて欲しい 27 [test]:(state, action) => (console.log('reducerのtestが動いた'),{ 28 Test: [ 29 state.Test, 30 { 31 message : action.payload.message 32 } 33 ] 34}), 35},initialState); 36export default task; 37 38//Route <Providerで全体に共有しているコンポーネント 39------------------------------------------------------- 40//import系は省略 41//middleware許可 及びstoreの共有 42let store = createStore(rootReducer,applyMiddleware(thunk)); 43 44export default class RouteLinks extends Component{ 45 render() { 46 return( 47 <div> 48 <Provider store={store}> 49 <Router> 50 <Switch> 51 <Route exact path="/" component={SelectionPage} /> 52 <Route exact path="/todo" component={Task} /> 53 <Route exact path="/category" component={Category} /> 54 </Switch> 55 </Router> 56 </Provider> 57 </div> 58 ) 59 } 60}
component/todo dispatchを発火させるところ
HTML
1//抜粋 2 <form onSubmit={(e) => { 3 e.preventDefault(); 4 dispatch(test()); 5略... 6 7
試したこと
actionの中でexport const test = createAction(~~)と書くとreducerの所まで処理がしっかりと動く
しかしconst test~ではasyncなどの処理が入れれないためfunction〜と書いている。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー