React组件间的Context传值

在一个典型的 React 应用中,数据是通过 props 属性自上而下(由父及子)进行传递的,代码如下

ThemeBtn 中想要获取到ContextSimple 中的 text 属性,需要将 text 属性从 ContextSimple 传递到
ToolBar,再传递到 ThemeBtn,可以想象假如有10层,那将极其繁琐!

Context提供了一种在组件之间共享值的方式,而不必显式地通过组件树的逐层传递 props。

import React, { Component } from 'react';

function ThemeBtn(props) {
  return (
    <div>{props.theme.text}</div>
  )
}

function ToolBar(props) {
  return <ThemeBtn {...props}></ThemeBtn>
}

class ContextSimple extends Component {
  constructor(props) {
    super(props);
    this.state = {
      text:'按钮'
    };
  }
  render() {
    return (
      <ToolBar theme={this.state}></ToolBar>
    );
  }
}

export default ContextSimple;

如何使用 Context

创建一个Context对象

const ThemeContext = React.createContext();

Provider(订阅者):Provider 接收一个 value 属性,传递给消费者组件。
注意:这个value名字是固定的,不能改变,否则后面的消费者组件中获取不到属性值

<ThemeContext.Provider value={this.state}>

Consumer(消费者):这里,React 组件也可以订阅到 context 变更

<ThemeContext.Consumer>
   {
     value => <div>{value.name}</div>
   }
</ThemeContext.Consumer>

Context 完整使用代码:

import React, { Component } from 'react';

// 创建一个Context对象
const ThemeContext = React.createContext();
function ThemeBtn(props) {
  return (
    <ThemeContext.Consumer>
      {
        value => <div>{value.name}</div>
      }
    </ThemeContext.Consumer>
  )
}

function ToolBar(props) {
  return <ThemeBtn></ThemeBtn>
}

class ContextSimple extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: '按钮'
    };
  }
  render() {
    return (
      <ThemeContext.Provider value={this.state}>
        <ToolBar></ToolBar>
      </ThemeContext.Provider>
    );
  }
}

export default ContextSimple;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 中,有多种方式可以实现组件的值传递。以下是一些常见的方式: 1. Props(属性):通过在父组件中给子组件传递属性,子组件可以通过 props 对象来获取这些属性值。父组件中的属性变化会触发子组件的重新渲染。 2. State(状态):每个组件都有自己的状态对象,可以通过 setState 方法来更新状态并触发重新渲染。父组件可以通过 props 将状态值传递给子组件,并通过回调函数来修改父组件的状态。 3. Context(上下文):Context 提供了一种在组件树中共享数据的方式,可以在父组件中创建一个 Context 对象,并通过 Provider 组件将数据传递给子组件。子组件可以通过 Consumer 组件或 useContext 钩子来访问这些数据。 4. Redux 或其他状态管理库:使用 Redux 或其他状态管理库可以将应用的状态集中管理,并通过提供的 API 来进行状态的读取和更新。这样不同组件可以共享和传递状态,而不需要通过 props 层层传递。 5. 发布订阅模式或事件总线:可以使用发布订阅模式或事件总线来实现组件的解耦和通信。一个组件可以发布一个事件,其他组件可以订阅该事件并执行相应的操作。 这些是常见的组件传值方式,选择哪种方式取决于具体的场景和需求。在实际开发中,根据项目的规模和复杂度,选择合适的方式来进行组件的数据传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值