简体   繁体   English

TypeError:无法读取未定义的属性(读取“地图”)反应

[英]TypeError: Cannot read properties of undefined (reading 'map') react

I'm trying to get a Tv show to display on multiple cards.我正在尝试让电视节目在多张卡片上显示。 I'm just using one Tv show before I start adding any more.在开始添加更多内容之前,我只是在使用一个电视节目。 So it should basically display one tv show on all the cards.所以它基本上应该在所有卡片上显示一个电视节目。

The error is coming from the tvList.js.错误来自 tvList.js。

tvList.js tvList.js

import React from "react";
import Tv from "../tvCard/";
import Grid from "@material-ui/core/Grid";

const TvList = (props) => {
  let tvCards = props.tvshows.map((m) => (
    <Grid key={m.id} item xs={12} sm={6} md={4} lg={3} xl={2}>
      <Tv key={m.id} tv={m} />
    </Grid>
  ));
  return tvCards;
};

export default TvList;

The Tv card seems to be fine and is working in my storybook.电视卡似乎很好,正在我的故事书中工作。

tvCard.js电视卡.js

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Card from "@material-ui/core/Card";
import CardActions from "@material-ui/core/CardActions";
import CardContent from "@material-ui/core/CardContent";
import CardMedia from "@material-ui/core/CardMedia";
import CardHeader from "@material-ui/core/CardHeader";
import Button from "@material-ui/core/Button";
import Typography from "@material-ui/core/Typography";
import FavoriteIcon from "@material-ui/icons/Favorite";
import CalendarIcon from "@material-ui/icons/CalendarTodayTwoTone";
import StarRateIcon from "@material-ui/icons/StarRate";
import IconButton from "@material-ui/core/IconButton";
import Grid from "@material-ui/core/Grid";
import img from '../../images/tv-poster-placeholder.png'

const useStyles = makeStyles({
  card: { maxWidth: 345 },
  media: { height: 500 },
  avatar: {
    backgroundColor: "rgb(255, 0, 0)",
  },
});

export default function TvCard(props) {
  const classes = useStyles();
  const tv = props.tv;
  return (
    <Card className={classes.card}>
      <CardHeader className={classes.header} title={tv.name} />
      <CardMedia
        className={classes.media}
        image={
          tv.poster_path
            ? `https://image.tmdb.org/t/p/w500/${tv.poster_path}`
            : img
        }
      />
      <CardContent>
        <Grid container>
          <Grid item xs={6}>
            <Typography variant="h6" component="p">
              <CalendarIcon fontSize="small" />
              {tv.first_air_date}
            </Typography>
          </Grid>
          <Grid item xs={6}>
            <Typography variant="h6" component="p">
              <StarRateIcon fontSize="small" />
              {"  "} {tv.vote_average}{" "}
            </Typography>
          </Grid>
        </Grid>
      </CardContent>
      <CardActions disableSpacing>
        <IconButton aria-label="add to favorites" onClick={null}>
          <FavoriteIcon color="primary" fontSize="large" />
        </IconButton>
        <Button variant="outlined" size="medium" color="primary">
          More Info ...
        </Button>
      </CardActions>
    </Card>
  );
}

tvPage.js tvPage.js

import React from "react";
import Header from "../components/headerTvList";
import FilterCard from "../components/filterTvCard";
import Grid from "@material-ui/core/Grid";
import { makeStyles } from "@material-ui/core/styles";
import TvList from "../components/tvList";

const useStyles = makeStyles({
  root: {
    padding: "20px",
  },
});

const TvListPage = (props) => {
  const classes = useStyles();
  const tvshows = props.tvshows;

  return (
    <Grid container className={classes.root}>
      <Grid item xs={12}>
        <Header title={"Discover Tv Shows"} />
      </Grid>
      <Grid item container spacing={5}>
        <Grid key="find" item xs={12} sm={6} md={4} lg={3} xl={2}>
          <FilterCard />
        </Grid>
        <TvList tvshows={tvshows}></TvList>
      </Grid>
    </Grid>
  );
};
export default TvListPage;

src/index.js src/index.js

import React from "react";
import ReactDOM from "react-dom";
import TvPage from "./pages/tvPage";

const sample = {

  "backdrop_path": "/wAEWZm2pSopAbqE5dQWE0ET8aR5.jpg",
  "first_air_date": "2021-01-08",
  "genre_ids": [
      10759,
      10765,
      99
  ],
  "id": 114695,
  "name": "Marvel Studios: Legends",
  "origin_country": [
      "US"
  ],
  "original_language": "en",
  "original_name": "Marvel Studios: Legends",
  "overview": "Revisit the epic heroes, villains and moments from across the MCU in preparation for the stories still to come. Each dynamic segment feeds directly into the upcoming series — setting the stage for future events. This series weaves together the many threads that constitute the unparalleled Marvel Cinematic Universe.",
  "popularity": 140.788,
  "poster_path": "/EpDuYIK81YtCUT3gH2JDpyj8Qk.jpg",
  "vote_average": 7.6,
  "vote_count": 515
}
        
    
    
      const tvshows = [sample, sample, sample, sample, sample, sample, sample];

      const App = () => {
        return (
            <TvPage tvshows={tvshows} />
        );
      };
      
      ReactDOM.render(<App />, document.getElementById("root"));

It could be an with the tvPage component.它可能与 tvPage 组件有关。

const tvshows = props.tvshows;

Here the value of tvshows might be empty initially.这里 tvshows 的值最初可能为空。 I'd suggest i your TvList component do an null check.我建议您的 TvList 组件进行 null 检查。

const TvList = (props) => {
  let tvCards = props.tvshows?.map((m) => (
    <Grid key={m.id} item xs={12} sm={6} md={4} lg={3} xl={2}>
      <Tv key={m.id} tv={m} />
    </Grid>
  ));
  return tvCards;
};

The ? ? is an [optional chaining] operator( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining ).是一个 [可选链接] 运算符( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining )。

The error is that for some reason, props.tvshows is undefined within TvList , even though it should be passed down from App to TvPage to TvList .错误是由于某种原因, props.tvshowsTvList中未定义,即使它应该从App传递到TvPageTvList At some point down the line, tvshows is lost.在某些时候, tvshows丢失了。

I would suggest logging all instances of tvshows , starting from when it is first defined in App , then logging in TvPage , then TvList , to see where exactly the problem is coming from.我建议记录tvshows的所有实例,从第一次在App中定义开始,然后登录TvPage ,然后登录TvList ,以查看问题的确切来源。 Once you've found it, do some debugging to make the problem stop.找到它后,请进行一些调试以使问题停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 反应:类型错误:无法读取未定义的属性(读取“地图”) - React: TypeError: Cannot read properties of undefined (reading 'map') 未捕获的类型错误:无法读取未定义的属性(读取“地图”)反应 - Uncaught TypeError: Cannot read properties of undefined (reading 'map') React TypeError:无法读取未定义的属性(读取“地图”)React JS - TypeError: Cannot read properties of undefined (reading 'map') React JS TypeError:无法在反应中读取未定义(读取“地图”)的属性 - TypeError: Cannot read properties of undefined (reading 'map') in react TypeError:无法在 React-Views 中读取未定义的属性(读取“地图”) - TypeError: Cannot read properties of undefined (reading 'map') in React-Views TypeError:无法在反应 JS 中读取未定义的属性(读取“地图”) - TypeError: Cannot read properties of undefined (reading 'map') in react JS React-Redux - 类型错误:无法读取未定义的属性(读取“地图”) - React-Redux - TypeError: Cannot read properties of undefined (reading 'map') TypeError:无法读取未定义的属性(读取“地图”) - State 返回未定义 - TypeError: Cannot read properties of undefined (reading 'map') - State returns undefined TypeError:无法读取未定义的属性(正在读取“映射”)(JavaScript 数组映射) - TypeError: Cannot read properties of undefined (reading 'map') (JavaScript array map) TypeError:无法读取未定义(读取“过滤器”)和未定义错误的属性 - React - TypeError: Cannot read properties of undefined (reading 'filter') and undefined error - React
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM