2017-10-11 1 views
0

Je suis en train de configurer une action pour que quand je fais un appel AJAX Je peux alors déclencher une autre action qui met à jour l'état avec les données renvoyées par l'appel:actions Redux Async

actions. 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); 
      });  
} 

dans mon élément, je prends l'action comme si:

this.props.teamActions.getUserTeams() 

l'action getUserTeams tire de bien parce que je reçois le journal de la console est revenu de l'API mais le setUserTeamsState ne semble pas. J'ai essayé de suivre les exemples en ligne du mieux que je peux mais je ne sais pas où je me suis trompé?

EDIT

Voici mon réducteur ci-dessous:

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; 

si je actions.js console.log(dispatch(setUserTeamsState(response.data))) retourne l'objet mon setUserTeamsState donc je suis Je ne sais pas pourquoi il ne s'exécute pas. Est-ce la bonne approche pour commencer?

+0

-vous voir des erreurs sur la console? Obtiens-tu un type d'exception? – mersocarlin

+0

Votre réducteur est-il appelé lorsque SET_USER_TEAMS est distribué? – topher

+0

Il semble que vous définissiez userTeams en tant que tableau dans l'état initial, mais en retournant Object et en tant que nouvel état dans l'appel du réducteur .... –

Répondre

0

Si le fichier console.log vous indique une valeur correcte, je crois que vous avez peut-être oublié d'ajouter votre réducteur ou le type d'action qui ne correspond à aucun type connu de vos réducteurs. La solution à ces fautes de frappe est de garder tous les types dans un fichier séparé et il suffit de les exporter comme:

(actions/types.js)

export const SET_USER_TEAMS = 'SET_USER_TEAMS';

Ensuite, il suffit de les importer dans le réducteur et dans votre action.

Si ce n'est pas une faute de frappe, alors vous devriez vérifier si le réducteur est distribué. Si c'est le cas, il y a un bug dans votre réducteur.

+0

posté mon réducteur ci-dessus, tous les regards dans l'ordre –

+0

est le réducteur exécuté du tout? pouvez-vous voir l'action de journalisation? (après l'ajout de console.log (action);) – primq

0

Essayez ceci:

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

Ceci est en supposant que vous action.teams est un tableau d'objets de l'équipe ...

essayer dans votre action ainsi:

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

Toujours ne fonctionne pas j'ai peur –

+0

une mise à jour mineure à l'état initial –

+0

C'est toujours la même chose, pas de mise à jour! –