代码之家  ›  专栏  ›  技术社区  ›  Curran-C

试图使用react useState添加对象数组,但出现错误“对象作为react子对象无效(找到:具有键{}的对象)”

  •  0
  • Curran-C  · 技术社区  · 4 年前

    我试图使用React-useState添加一个对象数组,但一直出现错误

    对象作为React子对象无效(找到:具有键{}的对象)

    这是我在应用程序中的代码。js 注:回复。数据被记录在控制台中,它的类型是一个对象

    const [users, setUsers] = useState([])
    
    useEffect(() => {
        Axios.get("http://localhost:3001/").then((response) => {
            setUsers([...users, response.data])
        }).catch((err) => console.log(err))
    }, [])
    

    这是get api

    app.get("/", (req, res) => {
        userModel.find({}, (err, result) => {
            if(!err) {
                res.json(result) //sends 'result' to front end
            } else {
                res.json(err)
            }})
    })
    

    数据(结果)被发送到前端

    这是我想添加的数据

    [{
        name: 'John',
        age: 20
    },
        name: 'Doe',
        age: 23
    }]
    

    编辑:像[0,1,2]这样的简单数组被添加到用户中,而包含对象的数组没有被添加

    编辑2: 这就是我的全部功能:

    export default function App() {
    
        const [users, setUsers] = useState([])
    
        useEffect(() => {
            Axios.get("http://localhost:3001/").then((response) => {
                setUsers([...users, response.data])
            }).catch((err) => console.log(err))
        }, [])
    
        return(
            <>
                {users.map((user) => {
                    return(
                        <div>
                            <h1>{user}</h1>
                        </div>
                    )
                })}
            </>
        )
    }
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Kavindu Vindika    4 年前

    您必须附加 response.data 以下是评论部分提到的@Thinker。

    useEffect(() => {
      Axios.get("http://localhost:3001/")
        .then((response) => {
          setUsers([...users, ...response.data]);
        })
        .catch((err) => console.log(err));
    }, []);
    
    

    然后你必须把它正确地插入JSX。现在你直接在里面放一个物体 <h1>{user}</h1> (这违反了JSX语法)。因此,请按如下方式更正,以包括 user 数据正确。(您可以根据自己的喜好进行修改)

                        <div>
                            <h1>{user.name}</h1>
                            <h1>{user.age}</h1>
                        </div>