【React hooks】createContext&useContext

67 阅读1分钟

适用场景

组件有些场景下是层层嵌套的,在传props的过程中,需要一层一层传递很麻烦, createContext&useContext就是解决此问题的,可以实现隔代传递

CreateContext

创建一个 Context 对象。当 React 渲染一个订阅了这个 Context 对象的组件,这个组件会从组件树中离自身最近的那个匹配的 Provider 中读取到当前的 context 值

context对象包含Provider和Consumer,Provider用来传递值,Consumer用来接收值

useContext

接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值

//context.js
import { createContext } from "react";
const TestContext = createContext();
const { Provider, Consumer } = TestContext;
export { TestContext, Provider, Consumer };
//Outer
import React, { Component } from 'react'
import {Provider} from './context'
import Inner from './inner'
import Son from './Son'

export default class Outer extends Component {
    state = {
        name:123
    }
  render() {
    return (
      <Provider value={this.state.name}>
        <Inner/>
        <Son/>
      </Provider>
    )
  }
}
//Inner
import React, { Component } from "react";
import { Consumer } from "./context";
import Deep from "./deep";

export default class inner extends Component {
  render() {
    return (
      <Consumer>
        {(data) => {
          console.log("data", data);
          return <Deep></Deep>;
        }}
      </Consumer>
    );
  }
}

//Deep
import React, { useContext } from "react";
import { TestContext } from "./context";

export default function Deep() {
  const val = useContext(TestContext);
  return <button>{val}</button>;
}