美文网首页
使用React Context进行状态管理(七)使用contex

使用React Context进行状态管理(七)使用contex

作者: du1dume | 来源:发表于2019-05-16 01:29 被阅读0次

React 16.6中加入了一个新功能,contextType,就是不使用Consumer也能使用Provider中的共享变量。

譬如Menu.js中的UserConsumer,我们来看看如何在不使用它的情况下访问user和onLogout变量。

首先在Menu组件中声明一个静态变量contextType,并把整个UserContext赋值给它:

class Menu extends React.Component {
  static contextType = UserContext
//以下代码省略

由于使用了UserContext,我们要修改下UserContext中的代码,保存一份完整的Context:

let UserContext
const { Provider, Consumer } = UserContext = React.createContext();
/*---中间代码省略---*/
//导出
export { UserProvider, Consumer as UserConsumer, UserContext }

再回到Menu组件代码中,改写render函数:

render() {
    const { user, onLogout } = this.context
    return (
      <div>
        <img
          src={user.avatar}
          onClick={this.toggleMenu}
          ref={this.avatarRef}
          className="UserAvatar"
          alt="avatar"
        />
        {this.state.visible && (
          <ul>
            <li onClick={onLogout}>退出登录</li>
          </ul>
        )}
      </div>
    )
  }

在render函数中,我们可以使用this.context来获取共享变量,这样UserConsumer就可以删掉不用了。

contextType有两个注意事项:

  1. 只能在类组件中使用
  2. 如果一个组件使用了两个Consumer,只对其中一个有效。也就是说,contextType有且只能有一个。

相关文章

网友评论

      本文标题:使用React Context进行状态管理(七)使用contex

      本文链接:https://www.haomeiwen.com/subject/djgvaqtx.html