【发布时间】:2021-12-10 14:24:46
【问题描述】:
这是正在获取的 json 的结构。我正在尝试通过 react 将一些嵌套线程数据呈现到网页。
import react, {useState, useEffect} from "react";
import axios from 'axios'
import ReactJson from 'react-json-view'
const FeaturedBoards = () => {
const [boards, setBoards] = useState([{page: '', threads: {}}]);
useEffect(() => {
fetchBoards();
}, []);
const fetchBoards = () => {
axios.get('https://a.4cdn.org/po/catalog.json')
.then((res) => {
console.log(res.data);
setBoards(res.data);
})
.catch((err) => {
console.log(err);
});
};
if(boards === 0) {
return <div>Loading...</div>;
}
else{
return (
<div>
<h1>Featured Boards</h1>
<div className='item-container'>
{boards.map((board) => (
<div className='board' key={board.id}>
<p>{board['threads']}</p>
</div>
))}
</div>
</div>
);
}
};
export default FeaturedBoards;
我已经尝试了所有方法来显示一些嵌套线程数据,但没有任何结果。我已经尝试过第二次调用 map on board 但没有运气,将它存储在一个变量中并从中调用仍然没有。我做错了什么吗?
【问题讨论】:
-
既然你的 API 数据中的
threads属性看起来是数组,你为什么要用useState([{page: '', threads: {}}])将它初始化为一个对象呢?这就是导致错误的原因。另外,为什么首先使用单元素数组进行初始化?为什么不只是useState([])? -
我的想法是你必须提供一个模板结构来填写。当我将 useState 切换到它时,它给了我这个错误。
Error: Objects are not valid as a React child (found: object with keys {no, sticky, closed, now, name, sub, com, filename, ext, w, h, tn_w, tn_h, tim, time, md5, fsize, resto, capcode, semantic_url, replies, images, omitted_posts, omitted_images, last_replies, last_modified}). If you meant to render a collection of children, use an array instead. -
至于你所说的尝试
useState([])很难在这里重新发布整个代码,哈哈 -
const [boards, setBoards] = useState([]); -
每个 board
threads是一个对象数组(可能具有no、sticky、closed等属性)。<p>{board['threads']}</p>对那个数据结构没有意义。正如错误消息所说,“对象(如board.threads中的对象)作为 React 子对象无效”
标签: reactjs react-native axios