美文网首页
Context小结

Context小结

作者: HS_d119 | 来源:发表于2021-01-07 11:48 被阅读0次

1、Context应用场景

  • 非父子组件数据的共享:

    在开发中,比较常见的数据传递方式是通过props属性自上而下(由父到子)进行传递。

    但是对于有一些场景:比如一些数据需要在多个组件中进行共享(地区偏好、UI主题、用户登录状态、用户信息等)。

    如果我们在顶层的App中定义这些信息,之后一层层传递下去,那么对于一些中间层不需要数据的组件来说,是一种冗余的操作。

  • 但是,如果层级更多的话,一层层传递是非常麻烦,并且代码是非常冗余的:

    React提供了一个API:Context;

    Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props;

    Context 设计目的是为了共享那些对于一个组件树而言是“全局”的数据,例如当前认证的用户、主题或首选语言;

2、Context讲解

Providr:生产者(提供共享数据)

Consumer:消费者(拿到生产者提供的数据源)

3、Context实践(函数组件、类组件)

父组件
import React, { Component, createContext } from 'react';
import Son from './Son';

// 设置默认值
export const { Provider, Consumer } = createContext({
  name: '哈哈哈',
  age: 18
});

export default class Parent extends Component {
  this.state = {
    name: 'HHH',
    age: 80
  }

  render() {
    return (
      <Provider value={this.state}>
        <Son />
      </Provider>
    );
  }
}
子组件
import React, { Component } from 'react';
import Grandson from './Grandson';

export default class Parent extends Component {

  render() {
    return (
      <div>
        <Grandson />
      </div>
    );
  }
}
孙子组件
import React, { Component } from 'react';
import { Consumer } from './Parent';

export default class Grandson extends Component {

  render() {
    return (
      <div>
        <Consumer>
          {
            value => <p>{value.name}</p>
          }
        </Consumer>
      </div>
    );
  }
}

相关文章

网友评论

      本文标题:Context小结

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