2017-10-11 35 views
0

私はAJAX呼び出しを行うとき、私は、その後の呼び出しから返されたデータと状態を更新する別のアクションオフ発射できるように、私はセットアップにアクションをしようとしている:Reduxの非同期アクション

アクションを。

this.props.teamActions.getUserTeams() 

私が得るためgetUserTeamsアクションは罰金をオフに発射:私はそうのようなアクションを呼び出し、私のコンポーネント内のjs

import axios from 'axios'; 

export const setUserTeamsState = (teams) => { 
    return { 
     type:'SET_USER_TEAMS', 
     teams:teams 
    } 
} 


export const getUserTeams = (dispatch) => { 

    return axios.get('http://localhost:7777/getteams') 
      .then((response) => { 
       console.log(response.data) 
       dispatch(setUserTeamsState(response.data)) 
      }) 
      .catch((error) => { 
       //console.log(error); 
      });  
} 

コンソールログはapiから返されましたが、setUserTeamsStateのように見えません。私は最良の方法でオンラインの例に従おうとしましたが、どこに間違っているのか分からないのですか?

ここでEDIT

は、以下の私の減速である:私は私はので、それは私のsetUserTeamsStateオブジェクトを返しますconsole.log(dispatch(setUserTeamsState(response.data))) actions.jsであれば

Reducer.js

const initialState = { 
    userTeams: [] 
}; 

const manageTeamsReducer = (state = initialState, action) => { 
    switch (action.type) { 
    case 'SET_USER_TEAMS': { 
     const newState = Object.assign(state, { 
     userTeams:action.teams 
     }); 
     return newState; 
    } 
    default: 
     return state; 
    } 
} 

export default manageTeamsReducer; 

なぜそれが実行されていないのか分かりません。これは正しいアプローチですか?

+0

はあなたを行いますコンソールのエラーを確認しますか?あなたはどんなタイプの例外を受けていますか? – mersocarlin

+0

'SET_USER_TEAMS'が発送されたときに減速機が呼び出されていますか? – topher

+0

あなたは初期状態の配列としてuserTeamsを設定していますが、レデューサー呼び出しではObjectを新しい状態として返すように見えます。 –

答えて

0

console.logに正しい値が示されている場合、あなたのレデューサーを追加することを忘れてしまった可能性があります。それからちょうど減速にし、あなたの行動でそれらをインポート

export const SET_USER_TEAMS = 'SET_USER_TEAMS';

(アクション/ types.js):これらのタイプミスを解決するには、別のファイルにすべてのタイプを維持し、同じようにそれらをエクスポートすることです。

これは誤字ではない場合は、レデューサーがまったく発送されているかどうかを確認する必要があります。あなたのレデューサーにバグがある場合。

+0

上記の私のレデューサーが掲載されました。すべてが順番に見えます –

+0

はレデューサーがまったく実行されていますか?あなたはアクションを記録することができますか? (console.log(action);を追加した後) – primq

0

これ試してみてください。これはあなたがaction.teams想定している

const manageTeamsReducer = (state = initialState.userTeams, action) => { 
    switch (action.type) { 
    case 'SET_USER_TEAMS': 
     return [ 
    action.teams 
    ]; 
    break; 
    default: 
     return state; 
    } 
} 

は、チームのオブジェクトの配列です...

同様にあなたの行動でこれを試してみてください。

export const getUserTeams =() => (dispatch) => { 

    return axios.get('http://localhost:7777/getteams') 
      .then((response) => { 
       console.log(response.data) 
       dispatch(setUserTeamsState(response.data)) 
      }) 
      .catch((error) => { 
       //console.log(error); 
      });  
} 
+0

まだ動作しません。 –

+0

初期状態のマイナーアップデート –

+0

まだ同じことが更新されていません! –

関連する問題