首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React TypeError - this.state.movies.map

React TypeError - this.state.movies.map
EN

Stack Overflow用户
提问于 2019-11-15 07:26:03
回答 5查看 578关注 0票数 0

我正在做一个叫MoVid的电影租赁项目,这个项目是React和JavaScript。这是我的密码:

App.js

代码语言:javascript
复制
import React, { Component } from "react";
import Movies from "./components/movies";
import "./App.css";

function App() {
  return (
    <main className="container">
      <Movies></Movies>
    </main>
  );
}

export default App;

Movie.jsx

代码语言:javascript
复制
import React, { Component } from "react";
import { getMovies } from "../services/fakeMovieService";

class Movies extends Component {
    state = {};

    render() {
        return (
            <table className="table">
                <thead>
                    <tr>
                        <th>Title</th>
                        <th>Genre</th>
                        <th>Stock</th>
                        <th>Rate</th>
                    </tr>
               </thead>
           <tbody>
               {this.state.movies.map(movie => (
                   <tr>
                       <td>{movie.title}</td>
                       <td>{movie.genre.name}</td>
                       <td>{movie.numberInStock}</td>
                       <td>{movie.dailyRentalRate}</td>
                   </tr>
               ))}
           </tbody>
         </table>
    );
  }
}

export default Movies;

fakeGenreService.js

代码语言:javascript
复制
export const genres = [
  { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
  { _id: "5b21ca3eeb7f6fbccd471814", name: "Comedy" },
  { _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" }
];

export function getGenres() {
  return genres.filter(g => g);
}

fakeMovieService.js

代码语言:javascript
复制
import * as genresAPI from "./fakeGenreService";

const movies = [
{
  _id: "5b21ca3eeb7f6fbccd471815",
  title: "Terminator",
  genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
  numberInStock: 6,
  dailyRentalRate: 2.5,
  publishDate: "2018-01-03T19:04:28.809Z"
},
{
  _id: "5b21ca3eeb7f6fbccd471816",
  title: "Die Hard",
  genre: { _id: "5b21ca3eeb7f6fbccd471818", name: "Action" },
  numberInStock: 5,
  dailyRentalRate: 2.5
},
{
  _id: "5b21ca3eeb7f6fbccd471817",
  title: "Get Out",
  genre: { _id: "5b21ca3eeb7f6fbccd471820", name: "Thriller" },
  numberInStock: 8,
  dailyRentalRate: 3.5
}];

export function getMovies() {
  return movies;
}

export function getMovie(id) {
  return movies.find(m => m._id === id);
}

export function saveMovie(movie) {
  let movieInDb = movies.find(m => m._id === movie._id) || {};
  movieInDb.name = movie.name;
  movieInDb.genre = genresAPI.genres.find(g => g._id === movie.genreId);
  movieInDb.numberInStock = movie.numberInStock;
  movieInDb.dailyRentalRate = movie.dailyRentalRate;

  if (!movieInDb._id) {
    movieInDb._id = Date.now();
    movies.push(movieInDb);
  }

  return movieInDb;
}

export function deleteMovie(id) {
  let movieInDb = movies.find(m => m._id === id);
  movies.splice(movies.indexOf(movieInDb), 1);
  return movieInDb;
}

我看过:

响应抛出“TypeError: this.props.data.map不是函数”的代码

TypeError: this.props.data.map不是一个函数

但他们帮不上忙。

其他3个代码文件在这里中。如果您需要更多的信息或代码,请问我!提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-11-15 08:19:18

我运行了您的代码,您得到的错误是Cannot read property 'map' of undefined

首先,您不在任何地方使用getMovies,您的电影数据在Movies组件中不可用。

其次,应该将电影初始化为空数组。

您的Movies组件代码应该如下所示:

代码语言:javascript
复制
import React, { Component } from "react";
import { getMovies } from "../services/fakeMovieService";

class Movies extends Component {
    state = { movies: [] };

    componentDidMount() {
      this.setState({ movies: getMovies() });
    }

    render() {
        return (
            <table className="table">
                <thead>
                    <tr>
                        <th>Title</th>
                        <th>Genre</th>
                        <th>Stock</th>
                        <th>Rate</th>
                    </tr>
               </thead>
           <tbody>
               {this.state.movies.map(movie => (
                   <tr>
                       <td>{movie.title}</td>
                       <td>{movie.genre.name}</td>
                       <td>{movie.numberInStock}</td>
                       <td>{movie.dailyRentalRate}</td>
                   </tr>
               ))}
           </tbody>
         </table>
    );
  }
}

export default Movies;
票数 0
EN

Stack Overflow用户

发布于 2019-11-15 07:28:11

从一开始你就没有本州的电影。初始化构造函数内的数组:

代码语言:javascript
复制
state = {
    movies: [],
};
票数 0
EN

Stack Overflow用户

发布于 2019-11-15 07:28:59

this.state.movies不是数组。它还没有定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58872157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档