React(5)

组件通信

父子通信

父传子

javascript 复制代码
// 父传子
function Son(props){
  console.log(props);
  
  return(
    <div>这是子组件  {props.msg}</div>
  )
}

function App() {
  const msg='父组件数据'
  const msg2='父组件数据2'
  return (
    <div className="App">
      <Son msg={msg} msg2={msg2}></Son>
    </div>
  );
}

export default App;

1、props能传递任意数据 包括JSX

2、props为只读数据 需要父组件进行修改

3、children 特殊的props

直接在子组件标签内的数据 为children属性

javascript 复制代码
 <Son msg={msg} msg2={msg2}>
        <span>props的children属性</span>
 </Son>


function Son(props){
  console.log(props);
  
  return(
    <div>这是子组件  {props.msg}
    <div>{props.children}</div>
    </div>
    
  )
}

子传父

子组件中调用父组件函数进行传值

子组件的点击事件调用父组件的函数进行修改

需要再父组件中存在这个定义方法,在子组件中传入,使用点击事件调用 应该是4321顺序

兄弟通信 二合一

就是A组件传值给父组件 父组件传值给B组件

javascript 复制代码
import { useState } from "react";

// 父传子
function A({ sendMsg }) {
  const msg = "A组件的msg";
  return (
    <div>
      这是子组件A
      <button onClick={() => sendMsg(msg)}>传值</button>
    </div>
  );
}
function B(props) {
  return <div>这是子组件B {props.Amsg}</div>;
}

function App() {
  const [Amsg, setAmsg] = useState("");
  const sendMsg = (msg) => {
    console.log(msg);
    setAmsg(msg);
  };
  return (
    <div className="App">
      <A sendMsg={sendMsg}></A>
      <B Amsg={Amsg}></B>
    </div>
  );
}

跨组件通信

App组件传值给A组件里的B组件

1、使用createContext创建一个上下文对象

2、在顶层组件A中通过Ctx.Provider提供数据

3、在底层组件B中通过useContext钩子函数获取数据

javascript 复制代码
import { createContext, useContext, useState } from "react";
const MsgContext=createContext()

function C(){
  return(
    <div>这是C组件
      <D></D>
    </div>
  )
}
function D(){
 const Dmsg= useContext(MsgContext)
  return(
    <div>这是D组件 {Dmsg}
    </div>
  )
}

function App() {
  const appMsg='这是app的数据'
  
  return (
    <div className="App">
     
      <MsgContext value={appMsg}>
      <C></C>
      </MsgContext>
    </div>
  );
}

export default App;
相关推荐
Olafur_zbj3 分钟前
【AI】深度解析OpenClaw智能体循环(Agentic Loop):底层运行机制、ReAct演进与多智能体协同架构
人工智能·react.js·架构·agent·openclaw
卡皮巴拉c994 分钟前
基于 wujie.js 进行微前端融合
前端
来碗疙瘩汤5 分钟前
深入解析 Vue 包:`vue` 究竟导出了什么?
前端
我命由我123455 分钟前
React - ref、回调 ref 回调执行次数的问题、createRef 函数、事件处理
前端·javascript·react.js·前端框架·html·html5·js
我命由我123457 分钟前
React - 收集表单元素、收集表单元素优化、生命周期(旧)、生命周期(新)
前端·javascript·react.js·前端框架·html·html5·js
SuperEugene8 分钟前
Monorepo + pnpm workspace 落地实操:Vue 中后台多项目 / 组件库 / 公共包管理|Vue 工程化篇
前端·javascript·vue.js·pnpm·vite·monorepo
We་ct9 分钟前
JSX & ReactElement 核心解析
前端·react.js·面试·架构·前端框架·reactjs·个人开发
白中白1213812 分钟前
杂七杂八补充系列
开发语言·前端·javascript
Xingxing?!18 分钟前
Vue2 微信小程序:页面间传递数组
前端·vue.js·uni-app
肉肉不吃 肉18 分钟前
代理服务的原理,及Vite 中具体实现方法
前端·vue.js