对象作为React子对象无效(找到:带有键的对象...)

时间:2020-09-10 05:40:35

标签: javascript reactjs state

我正在尝试设置状态。这是我的代码:

import React, { Component, useRef, Fragment, useEffect, useState } from "react";
import axios from "axios";

const Cart = (props) => {

    const [useCart, setCart] = useState([]);
        
    useEffect(() => {
        (async () => {
            const result = await axios
                .get('https://example.com/sample')
                .then((res) => {
                    setCart(res.data);
                })
                .catch((err) => {
                    console.error(err);
                });
        })();
    }, []);

    console.log(useCart);

    return (
        <div></div>
    );

}

export default Cart;

API返回的值如下:

[
    {
        'id': 5,
        'qwe': 'qwe',
        'asd': [
            {
                'aaa': 'aaa',
                'bbb': 'bbb'
            }
        ],
        'zxc': 'zxc'
    },
    {
        'id': 7,
        'qwe': 'qwe',
        'asd': [
            {
                'aaa': 'aaa',
                'bbb': 'bbb'
            }
        ],
        'zxc': 'zxc'
    }
]

我没有在组件上渲染它。我只是想控制台记录它。但是它会给出这样的错误:

Error: Objects are not valid as a React child (found: object with keys {id, qwe, asd, zxc}). If you meant to render a collection of children, use an array instead.

我不明白,我在哪里做错了。

1 个答案:

答案 0 :(得分:0)

不知道您的代码出了什么问题,但是也许我可以帮助您调试它。我将您的API响应复制到文件中,然后将其简单地导入组件内部的变量中。然后,我将状态设置为该变量,然后一切正常,所有控制台日志和其他一切正常。在这里查看-

https://codesandbox.io/s/angry-ramanujan-3k97v?file=/src/App.js

这告诉我问题可能出在您处理API响应的useEffect上。

我所做的一个更改,我认为您也应该在注销状态变量时执行此操作,您应该在生命周期挂钩中执行此操作。因此,您应该将console.log(useCart);放在其中 useEffect(()=>{ console.log(useCart); },[useCart])