美文网首页
跨组件通信Context

跨组件通信Context

作者: Jycoding | 来源:发表于2022-06-24 14:48 被阅读0次

目标任务: 了解Context机制解决的问题和使用步骤

问题场景

上图是一个react形成的嵌套组件树,如果我们想从App组件向任意一个下层组件传递数据,该怎么办呢?目前我们能采取的方式就是一层一层的props往下传,显然很繁琐

那么,Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法

实现步骤

创建Context对象 导出 Provider 和 Consumer对象

const { Provider, Consumer } = createContext()

使用Provider包裹根组件提供数据

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

    {/* 根组件 */}

</Provider>

需要用到数据的组件使用Consumer包裹获取数据

<Consumer >

    {value => /* 基于 context 值进行渲染*/}

</Consumer>

代码实现

import React, { createContext }  from 'react'

// 1. 创建Context对象

const { Provider, Consumer } = createContext()

// 3. 消费数据

function ComC() {

  return (

    <Consumer >

      {value => <div>{value}</div>}

    </Consumer>

  )

}

function ComA() {

  return (

    <ComC/>

  )

}

// 2. 提供数据

class App extends React.Component {

  state = {

    message: 'this is message'

  }

  render() {

    return (

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

        <div className="app">

          <ComA />

        </div>

      </Provider>

    )

  }

}

export default App

相关文章

  • 跨组件通信Context

    目标任务: 了解Context机制解决的问题和使用步骤 问题场景 上图是一个react形成的嵌套组件树,如果我们想...

  • 03-react-跨组件级通信Context

    react-跨组件级通信- Context 之前编写组件都是通过props或者state的方式来传递组件, 但组件...

  • 疑问汇总

    1. react context是怎样实现 跨组件通信的? 从Context源码实现谈React性能优化[http...

  • 组件跨层级通信 - Context

    如何使用Context:step1 : 创建一个context对象step2: 创建Provider,传递valu...

  • react 跨级组件通信

    跨级组件通信所谓跨级组件通信,就是父组件向子组件的子组件通信,向更深层的子组件通信。跨级组件通信可以采用下面两种方...

  • React拓展5-Context

    Context:一种组件间通信方式, 常用于【祖组件】与【后代组件】间通信 Context 通过组件树提供了一个传...

  • React跨层级组件通信-Context

    Provider: 外层提供数据的组件 Consumer: 内层获取数据的组件 注意: 当没有Provider会接...

  • 16.context-跨组件通信

    初始化组件 跨组件通信 1.引用及解构 与render同级 2.新写组件ConterProvider 3.src/...

  • 组件通信

    组件关系 组件关系可以分为父子组件通信、兄弟组件通信、跨级组件通信。 父子组件通信 1. 子组件使用 $emit(...

  • 组件通信 context

    概览 定义:Context 通过组件树提供了一个传递数据的方法,从而避免了在每一个层级手动的传递 props 属性...

网友评论

      本文标题:跨组件通信Context

      本文链接:https://www.haomeiwen.com/subject/mwpivrtx.html