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>;
}

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;
添加回答
舉報