React 组件化

124 阅读1分钟

跨层级传递参数 解决方案 Context

本方案可以用在父组建到子组建的参数传递

实现方式及其简单分三步走:
1.创建一个Context对象
2.利用Context.Provider传递参数
3.接收参数

1.创建一个Context对象
import React from "react";
export const Context = React.createContext();


2.利用Context.Provider传递参数
<Context.Provider value={要传递的数据}>
  <ChildrenPage></ChildrenPage>
</Context.Provider>
注意这里的childrenPage要放在Provider里面
Context就是刚刚创建出来的Context的引入

3.接收参数(三种方法)

    方法一:利用关键字contextType
      static contextType = Context;
      render() {
        return <div>childrenPage {this.context}</div>;
      }
      注意这个方法只能用于Class组建
      如果function组建要用的话只能用方法二

    
    方法二:利用hook useContext
    
    import React from "react";
    import { Context } from "../Context";

    export default function ChidrenPage1() {
      const context = React.useContext(Context);
      return <div>this is ChidrenPage1{context}</div>;
    }

    把Context作为参数传递进入useContext里面也可以收到传递的参数
    
    方法三 利用Consumer
    
    可以在Class ComponentFunctional Component里面使用Consumer,但是注意Consumer里面接收的是一个函数
    
    
    import React from "react";
    import { Context } from "../Context";
    export default function ConsumerPage() {
      return (
        <div>
          <Context.Consumer>
            {(value) => {
              return <div>{value}</div>;
            }}
          </Context.Consumer>
        </div>
      );
    }
    
    import React, { Component } from "react";
    import { Context } from "../Context";

    export default class ConsumerPage extends Component {
      render() {
        return (
          <div>
            this is ConsumerPage
            <Context.Consumer>
              {(value) => {
                return <div>{value}</div>;
              }}
            </Context.Consumer>
          </div>
        );
      }
    }