我试图理解一个使用上下文 api 的高阶组件的例子,这里使用。
因为,我对反应和函数式编程还很陌生,所以我不明白这里的实际情况如何。我们正在向函数发送一个函数,该函数withUser
返回另一个接收props
.
function withUser(Component) {
return function ConnectedComponent(props) {
return (
<UserContext.Consumer>
{user => <Component {...props} user={user} />}
</UserContext.Consumer>
);
};
}
因此,当我们创建时,UserAvatar
我们传递接收props
, 并返回的函数img
。
const UserAvatar = withUser(({ user, size }) => (
<img
className={`user-avatar ${size || ""}`}
alt="user avatar"
src={user.avatar}
/>
));
所以,基本上在这之后我们可以想象UserAvatar
是:
const UserAvatar = props => {
return (
<UserContext.Consumer>
{user => <Component {...props} user={user} />}
</UserContext.Consumer>
);
};
在哪里Component
:
({ user, size }) => (
<img
className={`user-avatar ${size || ""}`}
alt="user avatar"
src={user.avatar}
/>
)
我希望到目前为止这是正确的,但是我不明白的是这一行:
{user => <Component {...props} user={user} />}
props
当我们已经拥有并且正在从组件向下传递user
到组件时,为什么我们需要将其作为函数而不只是返回组件?UserAvatar
UserStats
const UserStats = () => (
<UserContext.Consumer>
{user => (
<div className="user-stats">
<div>
<UserAvatar user={user} />
{user.name}
</div>
<div className="stats">
<div>{user.followers} Followers</div>
<div>Following {user.following}</div>
</div>
</div>
)}
</UserContext.Consumer>
);