• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

React跨组件传值

武飞扬头像
web Rookie
帮助1


前言

应用场景

学新通

上图是一个react形成的嵌套组件树,如果需要跨组件传值,该怎么办呢?如果使用 props 一层一层的往下面传,就很麻烦.
可以通过Context,就可以在组件树之间进行数据传递

一.hook跨组件传值

实现步骤

  1. 使用 createContext创建Context对象
  2. 在顶层组件通过Provider提供数据
  3. 在底层组件通过useContext函数获取数据

代码实现

import React, { createContext,useState,useContext } from "react";
// 通过 react 的 createContext 实现跨组件传值
const Context = createContext();

function DemoA() {
   // 通过 useContext 获取顶层的数据
   const count = useContext(Context);
   return (
       <div>
           DemoA
          顶层传递来的数据:{count}
           <DemoC />
       </div>
   );
}

function DemoC() {
   const count = useContext(Context);
   return <div>DemoC 
       顶层传递的数据:{count}
          </div>;
}

function ConText() {
   const [count,setCount] = useState(0);
   return (
   	// 使用 Provier 包裹最外层组件,利用 value 属性向n个子组件传递数据
       <Context.Provider value={count}>
           <div>
               <h1>context</h1>
               <button onClick={()=>setCount(count 1)}>{count}</button>
               <hr />
               <DemoA />
           </div>
       </Context.Provider>
   );
}
学新通

效果展示

学新通

二.类组件跨组件通信

实现步骤

  1. 导入 createContext 方法并执行
  2. 使用 Proveider 包裹根组件
  3. 通过 Consumer 使用数据

代码实现

import React, { createContext } from "react";

// 1.导入 createContext 方法并执行
const { Provider, Consumer } = createContext()

function DemoA() {
    return (
        <div>this is DemoA
            <DemoC />
        </div>
    )
}

function DemoC() {
    return (
        <div>
            this is DemoC <br />
            {/* 3.通过 Consumer 使用数据 */}
            <Consumer>
                {value => <span>{value}</span>}
            </Consumer>
        </div>
    )
}

class App extends React.Component {
    state = {
        message: "this is message"
    }
    render() {
        return (
            // 2.使用 Proveider 包裹根组件
            <Provider value={this.state.message}>
                <div>
                    <DemoA />
                </div>
            </Provider>
        )
    }
}
export default App
学新通

效果展示

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfifiic
系列文章
更多 icon
同类精品
更多 icon
继续加载