reactjs - 如何在 React 中映射 JSON 对象数组?
问题描述
我从 API 返回中获得了一个 JSON 对象数组,但现在我无法获取其中一个数组的元素。在这里,我试图显示来自 docs 数组(20 个元素)的数据:
return(
<ul>
{books.docs.map((book, idx) => {
return (
<li key={idx}>
<h3>{book.docs[idx].title}</h3>
<p>{book.docs.creator[0]}</p>
</li>
);
})}
</ul>);
我不断收到地图函数错误:“books.map 不是函数”或“无法读取未定义的属性映射”,其中“books”是一个对象,它为我提供屏幕截图中的数据。关于如何解决问题的任何建议?
更新:这是我获取数据的方式:
const Books = () => {
const [books, setBooks] = useState([]);
const [loading, setLoading] = useState(false);
const [searchTerm, setSearchTerm] = useState("");
const fetchBooks = async () => {
setLoading(true);
try {
const result = await axios.get(`${API_URL}`);
setBooks(result.data);
}
catch (error) {
setError(true);
}
setLoading(false);
};
const onInputChange = e => {
setSearchTerm(e.target.value);
}
const onSubmitHandler = e => {
e.preventDefault();
fetchBooks();
}
return (
<div>
<div>
<Search onSubmitHandler={onSubmitHandler} searchTerm={searchTerm} onInputChange={onInputChange} error={error} />
</div>
<div>
<Loader loading={loading}>
Fetching
</Loader>
<BookList books={books} />
</div>
</div>
);}
解决方案
你可以试试这个:
如果您的任何书籍对象为空。
return books.docs.length ?(
<ul>
{books.docs.map((book, idx) => {
return book ? (
<li key={idx}>
<h3>{book.title ? book.title : ""}</h3>
<p>{book.creator ? book.creator[0]:""}</p>
</li>
) : null;
})}
</ul>
):null;
推荐阅读
- python - 未定义方法
- java - 生成一个系列/返回系列中的第 n 项
- chromium - 如何查看网络请求/响应是否使用 QUIC 和/或 HTTP/2?
- python - PathLib递归删除目录?
- php - 在 HTML 中,多项选择以逗号分隔(有效)保存在 MySQL 中,但不会从基于类的阅读方法中重新显示
- python-3.x - 为数据类型分配的默认内存是否在舍入中起作用?如果浮点数超过分配的内存,它会以什么方式四舍五入?
- mysql - 正确转义 JSON 特殊字符以在 CSV 文件中使用
- c# - C#字符串包含另一个字符串的所有字母字符
- react-native - React Native:状态更改后无法重新渲染图像
- google-chrome - chrome 在 XMLHttpRequest 之后不遵循重定向