3 回答
TA贡献1834条经验 获得超8个赞
随着v16.8.0中引入react-hooks ,您可以通过使用useContext钩子在功能组件中使用上下文
const Users = () => {
const contextValue = useContext(UserContext);
// rest logic here
}
编辑:从版本16.6.0起。您可以通过使用上下文的生命周期的方法this.context一样
class Users extends React.Component {
componentDidMount() {
let value = this.context;
/* perform a side-effect at mount using the value of UserContext */
}
componentDidUpdate() {
let value = this.context;
/* ... */
}
componentWillUnmount() {
let value = this.context;
/* ... */
}
render() {
let value = this.context;
/* render something based on the value of UserContext */
}
}
Users.contextType = UserContext; // This part is important to access context values
在版本16.6.0之前,您可以按以下方式进行操作
为了在您的生命周期方法中使用Context,您可以将组件编写为
class Users extends React.Component {
componentDidMount(){
this.props.getUsers();
}
render(){
const { users } = this.props;
return(
<h1>Users</h1>
<ul>
{users.map(user) => (
<li>{user.name}</li>
)}
</ul>
)
}
}
export default props => ( <UserContext.Consumer>
{({users, getUsers}) => {
return <Users {...props} users={users} getUsers={getUsers} />
}}
</UserContext.Consumer>
)
通常,您将在您的应用程序中维护一个上下文,并且将以上登录信息打包在HOC中以便重新使用是有意义的。你可以这样写
import UserContext from 'path/to/UserContext';
const withUserContext = Component => {
return props => {
return (
<UserContext.Consumer>
{({users, getUsers}) => {
return <Component {...props} users={users} getUsers={getUsers} />;
}}
</UserContext.Consumer>
);
};
};
然后你可以像这样使用它
export default withUserContext(User);
TA贡献1993条经验 获得超5个赞
好的,我找到了一种有限制的方法。通过该with-context库,我设法将我的所有消费者数据插入到我的组件道具中。
但是,要在同一个组件中插入多个使用方很复杂,您必须使用此库创建混合使用方,这会使代码不够美观且效率低下。
该库的链接:https : //github.com/SunHuawei/with-context
编辑:实际上,您不需要使用提供的多上下文api,with-context实际上,您可以使用简单的api并为每个上下文创建一个装饰器,如果您想在组件中使用多个消费者,则只需在类上声明所需的装饰数!
添加回答
举报