zoukankan      html  css  js  c++  java
  • React Context

    Context API:

    React.createContext(defaultValue):创建一个context对象。当React渲染订阅了这个Context对象的组件,这个组件会从组件树中离自身组件最近的那个匹配的Provider中读取到当前的context值。
     
    Context.Provider:接收一个value属性,传递给消费组件,允许消费组件订阅context变化。

    class.contextType :挂载在class上的contextType属性会被重赋值给一个由React。createContext()创建的Context对象。则使用this.context来消费最近Context上的那个值。

    useContext:接收一个context对象并返回该context的当前值。当前的context值由上层组件中距离当前组件最近的Provider的value prop觉得,只用在function

    Context.Consumer:这种方法需要一个函数作为子元素。这个函数接收当前的 context 值,并返回一个 React 节点。传递给函数的 value 值等价于组件树上方离这个 context 最近的 Provider 提供的 value 值。

    createContext:

    import React from "react";
    export const ThemeContext = React.createContext();
    export const ThemeProvider = ThemeContext.Provider;
    export const ThemeConsumer = ThemeContext.Consumer;

    Provider:

    import React, { Component } from "react";
    import { ThemeProvider } from "../Context";
    import HomePage from "./HomePage";
    import UserPage from "./Userpage";
    class ContextPage extends Component {
      constructor(props) {
        super(props);
        this.state = {
          theme: {
            themeColor: "red",
          },
        };
      }
      render() {
        const { theme } = this.state;
        return (
          <div>
            <h1>ContextPage</h1>
            <ThemeProvider value={theme}>
              <HomePage />
              <UserPage />
            </ThemeProvider>
          </div>
        );
      }
    }
    
    export default ContextPage;
    

      

    class.contextType:

    import React, { Component } from "react";
    import { ThemeContext } from "../Context";
    
    class APage extends Component {
      // 方法1
      //   static contextType = ThemeContext;
      render() {
        const { themeColor } = this.context;
        console.log(this, "this");
        return (
          <div>
            <h3 className={themeColor}>APage</h3>
          </div>
        );
      }
    }
    // 方法2
    HomePage.contextType = ThemeContext;
    export default APage;
    

      

    useContext:

    import React, { useContext } from "react";
    import { ThemeContext } from "../Context";
    
    export default function BPage(props) {
      const ctx = useContext(ThemeContext);
      return (
        <div>
          <h3 className={ctx.themeColor}>BPage</h3>
        </div>
      );
    }
    

    Consumer:

    import React, { Component } from "react";
    import { ThemeConsumer } from "../Context";
    
    export default class ConsumerPage extends Component {
      render() {
        return (
          <div>
            <h3>ConsumerPage</h3>
            <ThemeConsumer>
              {(themeContext) => <div className={themeContext.themeColor}>omg</div>}
            </ThemeConsumer>
          </div>
        );
      }
    }
    

      

    参考 && 感谢 各路大神:

    https://zh-hans.reactjs.org/docs/context.html 

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    JavaScript中的面向对象
    操作文件
    PDO 数据访问抽象层
    Jquery事件
    Jquery
    面向对象的五大基本原则是
    ioc依赖注入的原则
    java3
    java基础2
    java基础
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/14473862.html
Copyright © 2011-2022 走看看