React 状态管理 - Context API 前世今生(下)

New Context API

Provider【context的生产者组件】

  • createContext 创建一个Context对象,订阅了整个Context对象的组件,会从组件树中离自身最近的那个匹配的Provider中读取到当前的context值。
  • Context.Provider 父Context对象返回的Provider组件,允许消费组件订阅context的变化。

Consumer【context的消费者组件】

  • Class.contextType 申明了contextType属性的组件会被赋值一个Context对象,组件内的this.context可以访问最近Context上的值。
  • Context.Consumer 函数组件订阅Context对象的方式,如同contextType之于Class组件。

New Context API-实战

javascript 复制代码
import React, { Component } from 'react';
import CustomContext from './components/button-context';
import NewButton from './components/new-button';

export default class NewContext extends Component {
    constructor(props) {
        super(props);
        this.state = {
            color: '#28a745',        
        };            
    }
    render() {
        const { color } = this.state;
        // Provider【context的生产者组件】
        return (
            <CustomContext.Provider value={color}>
            	<NewButton>new context api</NewButton>
            </CustomContext>                            
        );    
    }
}
javascript 复制代码
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import CustomContext from '../button-context';

export default class NewButton extends Component {
    // 【context的消费者组件】
    static contextType = CustomContext;
    
    static propTypes ={
        children: PropTypes.string,    
    }
    
    static defaultProps = {
        children: '默认文案',   
    }
    
    render() {
        const { children } = this.props;
        
        return (
            <button type="button" style={{color: this.context }}>
            	{children}
            </button>        
        );   
    }
}
javascript 复制代码
import React from 'react';

const CustomContext = React.createContext();

export default CustomContext;
相关推荐
清汤饺子5 小时前
OpenClaw 本地部署教程 - 从 0 到 1 跑通你的第一只龙虾
前端·javascript·vibecoding
爱吃的小肥羊7 小时前
比 Claude Code 便宜一半!Codex 国内部署使用教程,三种方法任选一!
前端
IT_陈寒9 小时前
SpringBoot项目启动慢?5个技巧让你的应用秒级响应!
前端·人工智能·后端
树上有只程序猿9 小时前
2026低代码选型指南,主流低代码开发平台排名出炉
前端·后端
橙某人9 小时前
LogicFlow 小地图性能优化:从「实时克隆」到「占位缩略块」!🚀
前端·javascript·vue.js
高端章鱼哥10 小时前
为什么说用OpenClaw对打工人来说“不划算”
前端·后端
大脸怪10 小时前
告别 F12!前端开发者必备:一键管理 localStorage / Cookie / SessionStorage 神器
前端·后端·浏览器
Mr_Mao10 小时前
我受够了混乱的 API 代码,所以我写了个框架
前端·api
小徐_233310 小时前
向日葵 x AI:把远程控制封装成 MCP,让 AI 替我远程控制设备
前端·人工智能
冴羽10 小时前
来自顶级大佬 TypeScript 之父的 7 个启示
前端·typescript