1
votes

mapStateToProps () dans Connect () doit renvoyer un objet brut. Au lieu de cela reçu undefined

J'ai un problème d'affichage des données.

Dans mon application, j'utilise react et redux.

Dans la console, j'obtiendrai une erreur mapStateToProps () dans Connect (ListPets) doit retourner un objet simple. Au lieu de cela, reçu undefined.

Ceci est mon composant principal

const initialState = {
  isFetching: false,
  dataPet: [],
};

const fetchDataReducer = (state=initialState, action) => {
  switch(action.types) {
    case actionTypes.FETCH_DATA_START:
      return {
        ...state,
        isFetching: true,
      }
    case actionTypes.FETCH_DATA_SUCCESS:
      return {
        ...state,
        isFetching: false,
        dataPet: action.dataPet,
      }
    case actionTypes.FETCH_DATA_FAIL:
      return {
        ...state,
        isFetching: false,
      }
  };
}

Ce fragment console.log (loadData); code > afficher

Æ’ loadData() {
      return dispatch(Object(_actions_actions__WEBPACK_IMPORTED_MODULE_7__["default"])());
    }

Lorsque j'ajoute le code {dataPet.data} dans div. J'obtiens une erreur]. Comme si ces données n'étaient pas dans le magasin, je ne sais pas ...

c'est ma fonction de réduction

import React, { Component } from 'react';
import { connect } from 'react-redux';
import loadData from '../actions/actions';

class ListPets extends Component {

  componentDidMount() {
    const { loadData } = this.props;
    loadData();
    console.log(loadData );
  }

  render() {
    const { dataPet } = this.props;
    return (
      <div>


      </div>
    );
  }
}

const mapStateToProps = (state) => {
  return state;
};

const mapDispatchToProps = (dispatch) => {
  return {
    loadData: () => dispatch(loadData())
  }
};

Les données sont bien téléchargées, car le la console reçoit l'action FETCH_DATA_SUCCESS .

Je ne sais pas comment résoudre ce problème


1 commentaires

@HemadriDasari c'est mon code codesandbox.io/embed/rj4yz06xqm?fontsize=14


3 Réponses :


0
votes

Si chose est un objet dans l'état:

const mapStateToProps = state => ({
  thing: state.thing,
});

Alors utilisez comme:

this.props.thing code> dans votre composant


4 commentaires

Je mets à jour ---- const mapStateToProps = state => ({dataPet: state.dataPet,}); ---- mais j'obtiens cette erreur ---- TypeError: Impossible de lire la propriété 'dataPet' d'undefined ----


Avez-vous installé les outils de développement Redux? Pouvez-vous vérifier que l'état est dans la structure que vous attendez?


j'ai redux-logger. quand j'ai ceci --- const mapStateToProps = state => ({state}); ---- J'obtiens l'action FETCH_DATA_SUCCESS @ 12: 21: 07.618


Vous voudrez peut-être mettre en place une démo CodeSandbox ... mon sentiment ici est que l'état n'est pas mis à jour.



2
votes

J'ai apporté quelques modifications à votre code, essayez ceci maintenant ... devrait fonctionner https://codesandbox.io/s/z2volo1n6m


1 commentaires

dans le réducteur vous utilisez action.types, vous devez utiliser action.type .... je change mon code et boîte



2
votes

Dans votre réducteur, vous avez une faute de frappe:

const fetchDataReducer = (state=initialState, action) => {
  switch(action.types) { // here

Cela devrait être action.type et non action.types . p >


0 commentaires