2016-12-16 1 views
1

j'ai cette erreur avec Axios, l'amende de charge de JSON, mais son problème avec le renduerreur TypeError: Impossible de convertir undefined ou null pour objet

enter image description here

actions.js:

export const getUser = (callback)=>{ 
    return function(dispatch){ 
     dispatch({type: 'FETCH_GET_USER_REQUEST'}); 
     axios.get('https://jsonplaceholder.typicode.com/users') 
     .then((response)=>{ 
      dispatch({type:'FETCH_GET_USER_SUCCES', payload:response.data}); 
      if (typeof callback === 'function') { 
       callback(null, response.data) 
      } 
     }) 
    } 
} 

reducerUser.js

export const getUserReducer = (state=[], action) =>{ 
    switch(action.type){ 
     case 'FETCH_GET_USER_REQUEST': 
      return state; 
     case 'FETCH_GET_USER_FAILURE': 
      return state; 
     case 'FETCH_GET_USER_SUCCES': 
      return [...action.payload.data]; 
     default: 
      return state; 
    } 
} 

container.jsx

class GetUserContainer extends Component{ 
    componentDidMount(){ 
     this.props.getUser(); 
    } 
    render(){ 
     return(
      <GetUserComponent allUser={this.props.allUser} /> 
     ) 
    } 
} 
function mapStateToProps(store){ 
     return{ 
      allUser:store.allUser 
     } 
} 
function matchDispatchToProps(dispatch){ 
    return bindActionCreators({ 
     getUser:getUser 
    }, dispatch) 
} 

store.js

const store = createStore(
reducers, 
    applyMiddleware(thunk, logger()) 
); 
+0

Peut-être 'return [... action.payload];' au lieu de 'return [... action.payload.data];'? –

+0

@ ಠ_ಠ oui, avez-vous raison, merci –

Répondre

2

En regardant votre sortie de la console de votre, votre problème est plus probable dans votre réducteur lorsque l'action FETCH_GET_USER_SUCCES est touché.

Vous retournez ceci: [...action.payload.data];. Essayez de consigner votre charge utile, car il se peut qu'il n'y ait pas d'objet de données sur la charge utile, d'où l'erreur de conversion non définie ou nulle à objet. Je vous parie avez juste besoin de revenir: [...action.payload];

0

de la pile d'erreur, vous pouvez voir l'erreur est appelée à partir getUserReducer dans votre code, puis dans _toConsumableArray qui est une méthode d'assistance créée par babel lorsque transpiling opérateur propagation à ES5.

Comme @ ಠ_ಠ a indiqué, vous obtenez l'erreur car action.payload.data n'est pas un objet, auquel cas l'application de l'opérateur spread échoue. ([...action.payload.data])