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

Posted

技术标签:

【中文标题】TypeError:无法读取未定义的 React Hooks 的属性“地图”【英文标题】:TypeError: Cannot read property 'map' of undefined React Hooks 【发布时间】:2021-03-10 08:15:24 【问题描述】:

我需要一些帮助来理解为什么我从标题中得到错误:'TypeError: Cannot read property 'map' of undefined'。我需要在页面上呈现(例如此处的州和国家/地区)来自 API 的一些数据,但由于某种原因无法正常工作。

import React,  useEffect, useState  from 'react';
import axios from 'axios';

const APIFetch = () => 
    const [user, setUser] = useState('');
    const [info, setInfo] = useState([]);

    const fetchData = async () => 
        const data = await axios.get('https://randomuser.me/api');
        return JSON.stringify(data);
    

    useEffect(() => 
        fetchData().then((res) => 
            setUser(res)
            setInfo(res.results);
        )
    , [])

    const getName = user => 
        const  state, country  = user;
        return `$state $country`
    

    return (
        <div>
            info.map((info, id) => 
                return <div key=id>getName(info)</div>
            )
        </div>
    )

你们能给我一些帮助吗?谢谢。

【问题讨论】:

fetchData 中的 console.log(res.results) 的结果是什么?你确定是数组吗? 检查res.results的值 【参考方案1】:

这样做

import React,  useEffect, useState  from 'react';
import axios from 'axios';

const APIFetch = () => 
    const [user, setUser] = useState('');
    const [info, setInfo] = useState([]);

    useEffect(() => 
        const fetchData = async () => 
            const res = await axios.get('https://randomuser.me/api');
            setUser(res.data);
            setInfo(res.data.results);
        
        featchData();
    , [])

    const getName = user => 
        const  state, country  = user;
        return `$state $country`
    

    return (
        <div>
            info.map((info, id) => 
                return <div key=id>getName(info)</div>
            )
        </div>
    )


代码沙盒:https://codesandbox.io/s/vigorous-lake-w52vj?file=/src/App.js

【讨论】:

【参考方案2】:

试试这个方法,

const APIFetch = () => 
  const [user, setUser] = useState("");
  const [info, setInfo] = useState([]);

  const fetchData = async () => 
    const data = await axios.get("https://randomuser.me/api");
    return data;  <--- Heres is the first mistake
  ;

  useEffect(() => 
    fetchData().then((res) => 
      setUser(res);
      setInfo(res.data.results);
    );
  , []);

  const getName = (user) => 
    const  state, country  = user.location;  <--- Access location from the user
    return `$state $country`;
  ;

  return (
    <div>
      info.map((info, id) => 
        return <div key=id>getName(info)</div>;
      )
    </div>
  );
;
    返回data,而不在fetchData 内进行字符串化。 在getName内访问user.location

代码库 - https://codesandbox.io/s/sharp-hawking-6v858?file=/src/App.js

【讨论】:

【参考方案3】:

你不需要JSON.stringify(data);

const fetchData = async () => 
    const data =  await axios.get('https://randomuser.me/api');
    return data.data

【讨论】:

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

React - TypeError:无法读取未定义的属性“img”

TypeError:无法读取未定义的属性“长度”(React,heroku)

未处理的拒绝(TypeError):在 React 中使用 useRef 时无法读取未定义的属性(读取“值”)

React Native - TypeError:无法读取未定义的属性“干净”

TypeError:无法读取 React 未定义的属性“标题”

REACT JS:TypeError:无法读取未定义的属性“参数”