web-dev-qa-db-fra.com

Les objets ne sont pas valides en tant qu'enfant React. Si vous vouliez rendre une collection d'enfants, utilisez plutôt un tableau

Je suis en train de configurer une application React avec un backend Rails. Je reçois le message d'erreur "Les objets ne sont pas valides en tant qu'enfant React (trouvé: objet avec les clés {id, nom, informations, created_at, updated_at}). Si vous vouliez rendre une collection d'enfants, utilisez un tableau à la place. "

Voici à quoi ressemblent mes données:

[
    {
        "id": 1,
        "name": "Home Page",
        "info": "This little bit of info is being loaded from a Rails 
        API.",
        "created_at": "2018-09-18T16:39:22.184Z",
        "updated_at": "2018-09-18T16:39:22.184Z"
    }
]

Mon code est le suivant:

import React from 'react';

class Home extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      error: null,
      isLoaded: false,
      homes: []
    };
  }

  componentDidMount() {
    fetch('http://localhost:3000/api/homes')
      .then(res => res.json())
      .then(
        (result) => {
          this.setState({
            isLoaded: true,
            homes: result
          });
        },
        // error handler
        (error) => {
          this.setState({
            isLoaded: true,
            error
          });
        }
      )
  }

  render() {

    const { error, isLoaded, homes } = this.state;

    if (error) {
      return (
        <div className="col">
          Error: {error.message}
        </div>
      );
    } else if (!isLoaded) {
      return (
        <div className="col">
          Loading...
        </div>
      );
    } else {
      return (
        <div className="col">
          <h1>Mi Casa</h1>
          <p>This is my house y'all!</p>
          <p>Stuff: {homes}</p>
        </div>
      );
    }
  }
}

export default Home;

Qu'est-ce que je fais mal?

25
iChido

Votre donnée homes est un tableau, vous devez donc parcourir le tableau en utilisant Array.prototype.map () pour que cela fonctionne.

return (
    <div className="col">
      <h1>Mi Casa</h1>
      <p>This is my house y&apos;all!</p>
      {homes.map(home => <div>{home.name}</div>)}
    </div>
  );
29
Karl Taylor