亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“對象作為 React 子項無效。如果您打算渲染子項集合,請改用數組。” 錯誤

“對象作為 React 子項無效。如果您打算渲染子項集合,請改用數組。” 錯誤

婷婷同學_ 2023-03-03 14:52:22
我正在嘗試將一個對象作為user我的 React 的值傳遞給. 然而,React 不喜歡將對象作為子對象傳遞的想法。這是我收到的錯誤消息:Context.Provider<UserContext.Provider value={user} />錯誤:對象作為 React 子項無效(已找到:具有鍵 {id、用戶名、名字、姓氏、電子郵件、頭像} 的對象)。如果您打算渲染子集合,請改用數組。我希望有人能幫忙。這是我的 React 組件,其中發生了所有這些:class MyApp extends App {  constructor(props) {    super(props);    this.state = {      user: {},      authenticating: false,    };  }  logout = () => {    ...  };  render() {    const { Component, pageProps } = this.props;    const user = {      user: this.state.user,      logout: this.logout,    };    return (      <>        {!this.state.authenticating && (          <UserContext.Provider value={user}>            <Navbar />            <Component {...pageProps} />          </UserContext.Provider>        )}      </>    );  }}有趣的是,當我改變const user = {  user: this.state.user,  logout: this.logout,};到(例如)const user = {  username: this.state.user.username,  logout: this.logout,};一切都很好。所以(正如上面的錯誤消息所暗示的那樣)問題在于傳遞this.state.user給我的上下文提供者。為什么?我該如何解決這個問題?另外,這是我的<Context.Consumer />:  <UserContext.Consumer>    {user => (      <>        {user.user ? (          <>            <Avatar user={user.user} />            <Button onClick={user.logout}>Logout</Button>          </>        ) : (          <>            <Nav.Link href="/users/login">Log in</Nav.Link>            <Nav.Link href="/users/signup">Sign up</Nav.Link>          </>        )}      </>    )}  </UserContext.Consumer>
查看完整描述

2 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

代替


function Avatar({ user }) {

  return <Nav.Link href="/users/login">{user}</Nav.Link>;

}


function Avatar({ user }) {

  return <Nav.Link href="/users/login">{user.something}</Nav.Link>;

}


查看完整回答
反對 回復 2023-03-03
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

代碼沙盒: https://codesandbox.io/s/trusting-rubin-7rcc8


很可能您正在嘗試像這樣呈現上下文,這會導致錯誤,而不是解構上下文/用戶對象。


// this results in

// Objects are not valid as a React child (found: object with

// keys {username, age}). If you meant to render a collection of 

// children, use an array instead.


<Consumer>

{(ctx) => (

<>

 {ctx.user}

</>

)

</Consumer>

應用程序.js


import React from "react";

import UserState, { Consumer } from "./UserState";


const Avatar = ({ user }) => (

  <>

    <div>{user.username}</div>

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

  </>

);


const UserData = () => {

  return (

    <Consumer>

      {(ctx) => (

        <>

          {ctx.user && (

            <>

              <Avatar user={ctx.user} />

            </>

          )}

        </>

      )}

    </Consumer>

  );

};


export default function App() {

  const userState = {

    user: {

      username: "hi",

      age: 18

    }

  };


  return (

    <UserState.Provider value={userState}>

      <UserData />

    </UserState.Provider>

  );

}

用戶狀態.js


import React from "react";


const UserState = React.createContext({});


export default UserState;


export const { Consumer } = UserState;


查看完整回答
反對 回復 2023-03-03
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號