React Context 详解

React Context 是一个强大的组件广播功能,但是也不能随意滥用,它并不适合一些简单的组件通信,如果杀鸡用牛刀可能会起到相反的效果


什么时候使用

  1. 当你要在组件树中共享一些全局数据的时候,比如要让你的应用风格可配置,或则语言可选 那么像这种 themelanguage 的属性就可以托管给 Context

案例
先考虑不用context 的情况

// 假如现在你的组件树中有多个按钮需要随时切换背景颜色

// 你封装的按钮
class ThemeButton extends React.Component {
   
  render() {
   
    return <button style={
   {
   backgroundColor: this.props.theme}}>ThemeButton</button>
  }
}

// 在某个组件中使用了这个按钮
function Toolbar(props) {
   
  return (
    <div>
      <ThemeButton theme={
   props.theme}/>
    </div>
  )
}

// 为了能够在同一控制所有按钮的样式 你可以在App.js 中传入样式
class App extends Component {
   
  render() {
   
    return (
      <div>
        <Toolbar theme="blue"/>
      </div>
    );
  }
}

你会发现 就一个简单的theme 属性要通过 App -> Toolbar -> ThemeButton ,如果嵌套的关系更加复杂,那么这种传递props的方式就不太合适了

Context 广播 来优化

// 声明一下我将所有组件写在一起只是方便演示,你可以将组件写在不同的文件中
//1. 首先你可以在src 下创建一个context的文件并创建index.js
import React from 'react'

export const ThemeContext = React.createContext('green')

之后你就可以使用这个导出的ThemeContext

import {
   ThemeContext} from '../context'

class ThemeButton extends React.Component {
   
  static contextType = ThemeContext
  render(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值