简体   繁体   中英

Objects are not valid as a React child, render a collection of children, use an array instead

This React class gave me the error

Error: Objects are not valid as a React child (found: object with keys {_id, name}). If you meant to render a collection of children, use an array instead.)

is anything wrong here? here I am passing movies object and iterate through the map method. if it is wrong how can I do this? I saw some similar questions here but did not help me.

import React, { Component } from 'react';
class Movies extends Component {
    state = { 
        movies: [
            {
              _id: "5b21ca3eeb7f6fbccd471815",
              title: "Terminator",
              genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
              numberInStock: 6,
              dailyRentalRate: 2.5,
              publishDate: "2018-01-03T19:04:28.809Z",
              liked: false
            },
            {
              _id: "5b21ca3eeb7f6fbccd471816",
              title: "Die Hard",
              genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
              numberInStock: 5,
              dailyRentalRate: 2.5,
              liked: true
            },
            {
              _id: "5b21ca3eeb7f6fbccd471817",
              title: "Get Out",
              genre: { _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" },
              numberInStock: 8,
              dailyRentalRate: 3.5,
              liked: true
            },
            {
              _id: "5b21ca3eeb7f6fbccd471819",
              title: "Trip to Italy",
              genre: { _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
              numberInStock: 7,
              dailyRentalRate: 3.5,
              liked: false
            },
            {
              _id: "5b21ca3eeb7f6fbccd47181a",
              title: "Airplane",
              genre: { _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
              numberInStock: 7,
              dailyRentalRate: 3.5,
              liked: true
            },
            {
              _id: "5b21ca3eeb7f6fbccd47181b",
              title: "Wedding Crashers",
              genre: { _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
              numberInStock: 7,
              dailyRentalRate: 3.5,
              liked: false
            },
            {
              _id: "5b21ca3eeb7f6fbccd47181e",
              title: "Gone Girl",
              genre: { _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" },
              numberInStock: 7,
              dailyRentalRate: 4.5,
              liked: false
            },
            {
              _id: "5b21ca3eeb7f6fbccd47181f",
              title: "The Sixth Sense",
              genre: { _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" },
              numberInStock: 4,
              dailyRentalRate: 3.5,
              liked: true
            },
            {
              _id: "5b21ca3eeb7f6fbccd471821",
              title: "The Avengers",
              genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
              numberInStock: 7,
              dailyRentalRate: 3.5,
              liked: false
            }
          ]
     }  

     handleDelete = (movie) => {
         console.log("movie deleted")
     };

    render() { 
        return ( 
        <React.Fragment>
                <p>Showing 9 movies in the database</p>

                <table className="table table-hover">
                    <thead>
                        <tr>
                        <th scope="col">Title</th>
                        <th scope="col">Genre</th>
                        <th scope="col">Stock</th>
                        <th scope="col">Rate</th>
                        <th scope="col">Action</th>
                        </tr>
                    </thead>
                    <tbody>
                        {this.state.movies.map(movie => (
                            <tr key={movie._id}>
                            <th>{movie.title}</th>
                            <td>{movie.genre}</td>
                            <td>{movie.numberInStock}</td>
                            <td>{movie.dailyRentalRate}</td>
                            <td><button onClick={() =>this.handleDelete(movie)} type="button" className="btn btn-danger">Delete</button></td>
                            </tr>
                        ))}
                    </tbody>
                </table>
            
            </React.Fragment>
         );
    }
}
 
export default Movies;
<td>{movie.genre}</td>

Genre is an object. You can't render it.
Change it to {movie.genre.name} and it should work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM