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;
相关推荐
橘子星20 分钟前
基于 ES6 语法的 NLP 任务模块化开发实践
前端·javascript
玉宇夕落21 分钟前
Props的传递学习
前端
月光刺眼23 分钟前
JS 底层执行机制探讨:执行上下文、变量提升与调用栈
前端·javascript
|_⊙39 分钟前
Linux 信号
运维·服务器·前端
ZC跨境爬虫1 小时前
跟着 MDN 学 JavaScript day_1:什么是 JavaScript?
开发语言·前端·javascript·ecmascript
广州华水科技1 小时前
单北斗GNSS水库变形监测系统的应用与发展分析
前端
吠品1 小时前
PyTorch 踩坑:libtorch_cpu.so 找不到 iJIT_NotifyEvent 符号
前端·vue.js·elementui
qq_2518364571 小时前
基于java Web 日化商超库存管理系统设计与实现
java·开发语言·前端
xiaofeichaichai1 小时前
Vue 响应式原理
前端·javascript·vue.js
提子拌饭1331 小时前
模态窗鸿蒙PC Electron框架实现技术详解 - 饮料含糖量应用案例分析
前端·javascript·华为·electron·前端框架·开源·鸿蒙