TypeError:无法读取未定义的属性“地图”。找不到解决办法

Posted

技术标签:

【中文标题】TypeError:无法读取未定义的属性“地图”。找不到解决办法【英文标题】:TypeError: Cannot read property 'map' of undefined. Can't find a solution 【发布时间】:2021-03-30 04:10:43 【问题描述】:

代码编译成功,但在 localhost 上出现错误:TypeError: Cannot read property 'map' of undefined.

import React from 'react';
    
    const Module = (props) => 
        const courses = props.courses;
        console.log(props.courses);
        let Course = courses.map(item=><li>item</li>)
        
        return(
            <ul>Course</ul>
        )
    
    
    export default Module;

【问题讨论】:

那么认为 props.courses 是什么?有没有调试过? 【参考方案1】:

似乎props.courses 在某些时候是未定义的;可能在异步加载数据之前。

你有几个选择!

选项 1: 默认 courses 为空数组。这将解决错误,但可能会使用户感到困惑,因为加载状态不清楚

const Module = (props) => 
  const courses = props.courses || [];
  console.log(props.courses);
  let Course = courses.map(item=><li>item</li>)
  return(
    <ul>Course</ul>
  )

选项 2: 仅在数据存在时对其进行映射;否则显示加载指示器。这可能对用户体验更好。

const Module = (props) => 
  const courses = props.courses;

  if (!courses) 
    return "Loading...";
  

  let Course = courses.map(item=><li>item</li>)
  return(
    <ul>Course</ul>
  )

【讨论】:

【参考方案2】:

确保props 包含数据:

import React from 'react';

const Module = (props) => 
    const  courses  = props;
    const Course = courses && courses.length > 0 ? courses.map(item=><li>item</li>) : null;
    return Course ? (<ul>Course</ul>) : null;


export default Module;

【讨论】:

【参考方案3】:

您可以使用解构,以及默认参数来防止上述错误,并减少代码。

const Module = (courses = []) => 
    console.log(courses);
    return <ul>
        courses.map(item=><li>item</li>)
    </ul>;
;

【讨论】:

以上是关于TypeError:无法读取未定义的属性“地图”。找不到解决办法的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:从 API 获取时无法读取未定义的属性(读取“地图”)

Graphql,React - TypeError:无法读取未定义的属性“地图”

TypeError:无法读取未定义的 React Hooks 的属性“地图”

Vue警告]:渲染错误:“TypeError:无法读取未定义的属性'map'”Vue Google地图[重复]

无法从 nextjs 中的 api 获取图像-TypeError:无法读取未定义的属性(读取“地图”)NEXTJS

TypeError:无法读取未定义的属性(读取“地图”),以及 React.js 中的多个 API 请求