【发布时间】:2021-05-11 11:22:29
【问题描述】:
我有一个 React 组件,它调用一个返回对象数组的后端 API。
本质上,我有一个useFetch.js 文件,它获取数据然后显示在Products.js 文件中
我的主要问题是,当我简单地记录返回的数据时,无论我刷新浏览器多少次,总是记录正确的数据。但是,一旦我包含地图来呈现数据,它仅在第一次显示,然后我得到一个错误
无法读取 null 的属性“地图”
我只记录数据时的简单场景中的故障:
Products.js
import React from "react";
import useFetch from "./useFetch";
import DisplayTable from "./DisplayTable"
export default function Products(props) {
const [data, loading, error] = useFetch("http://localhost:8080/products");
console.log("data", data)
console.log("loading", loading)
console.log("error", error)
return (
<div>
</div>
)
}
useFetch.js
import { useState, useEffect } from "react";
export default function useFetch(url) {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(false);
const [data, setData] = useState(null);
async function asyncFetchAPI() {
setLoading(true)
fetch(url, {method: "GET"})
.then(response => response.json())
.then(data => setData(data))
.then(loading => setLoading(false))
.catch((error) => {
console.log('error: ' + error)
setError(true)
})
}
useEffect(() => {
asyncFetchAPI();
}, []);
return [data, loading, error];
}
以上工作正常,我可以很好地看到控制台中的数据。但是,当我修改Products.js 以包含地图并显示如下
const displayTable = data.map(item => <DisplayTable key={item.id} item={item} />)
现在的新结果是:
import React from "react";
import useFetch from "./useFetch";
import DisplayTable from "./DisplayTable"
export default function Products(props) {
const [data, loading, error] = useFetch("http://localhost:8080/products");
console.log("data", data)
console.log("loading", loading)
console.log("error", error)
const displayTable = data.map(item => <DisplayTable key={item.id} item={item} />)
return (
<div>
</div>
)
}
那时,我明白了
无法读取 null 的属性“地图”
不管怎样,我的 DisplayTable.js 函数看起来像:
import React from "react"
function DisplayTable(props) {
console.log(props)
return (
<h1>{props.item.categoryId}</h1>
)
}
export default DisplayTable
【问题讨论】:
-
试试
data?.map
标签: javascript reactjs react-native react-hooks