reactjs - 在 React 中映射对象数组时出现错误

标签 reactjs

我尝试从后端获取数据并在前端显示该数据。这是我为执行此任务而编写的代码。

function ViewPost() {

    const { id } = useParams();
    console.log(id);

    const [posts, setPosts] = useState({});

    useEffect(()=>{
        getOnePost();
    }, []);

    useEffect(()=>{
        if (posts && posts.location) {
            console.log(posts.location);
            console.log(posts.location.longitude);
            console.log(posts.location.latitude);
        }
    }, [posts]);

    const getOnePost = async () => {
        try {
            const response = await axios.get(`/buyerGetOnePost/${id}`)
            console.log(response);
            const allPost=response.data.onePost;
            setPosts(allPost);
        } catch (error) {
            console.error(`Error: ${error}`)
        }
    }
    console.log(posts);

    console.log(posts.wasteItemList);
    return(
        <div className="posts-b">
            <div className="posts__container-b">
                <h1>Post Details</h1>
                <main className="grid-b">
                    {posts.wasteItemList.map((notes,index)=>(
                    <article>
                        <div className="text-b">
                            <h3>Post ID: {index+1}</h3>
                            <p>Waste Item: Polythene Roll</p>
                            <p>Quantity: 1 kg</p>
                        </div>
                    </article>
                    ))}
                </main>
            </div>
        </div>
    );
}
export default ViewPost;

当我 console.log(posts) 时,它成功显示发布数据。 WasteItemList 是一个数组,它有两个对象。 Inside data of the post

当我 console.log(posts.wasteItemList) 时,它还成功显示了两个对象数组。 Inside data of the wasteItemList

但是当我尝试映射 WasteItemList 时,问题就出现了。我尝试使用此posts.wasteItemList.map进行映射。但我收到错误“TypeError:无法读取未定义的属性“map””。我该如何解决这个问题?

最佳答案

发生这种情况是因为数据无法立即可用,因此,在一段时间内 posts.wasteItemList 未定义。

每当访问wasteItemList时,您应该使用 posts && posts.wasteItemList && posts.wasteItemList.map(()=> *)

这为您提供绝对的安全。

如果您使用的是 TypeScript 或节点版本 >= 14,则可以使用可选链posts?.wasteItemList?.map(()=>{}) 这基本上是同一件事,只是语法上更令人愉悦。

关于reactjs - 在 React 中映射对象数组时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68692780/

相关文章:

javascript - 如何解决 ReactJS 中帖子的增加和减少

javascript - 当测试组件呈现嵌套连接组件时,React 测试失败,找不到嵌套组件

javascript - 如何将 getAccessToken 与 fetch 功能集成,以将数据从 DRF 后端加载到 React 前端?

css - 将普通 CSS "style"与 Bootstrap "class"混合使用是好习惯吗?

javascript - 如何使用 ReactJS 在用户滚动时更新 array.length 计数器

reactjs - 如何将Electron应用程序部署为Windows中的可执行文件或可安装文件

javascript - react 导航 TabNavigator : Reset previous tab on tab change

javascript - 错误无法读取未定义的属性(读取 'configurations')。类型错误 : Cannot read properties of undefined (reading 'configurations' )

javascript - 使用 mapStateToProps Jest 测试 promise 函数

reactjs - React 类组件渲染两次