当前位置:首页 > React

react父子组件之间如何通信

2026-03-11 12:50:23React

父子组件通信方法

父组件向子组件传递数据
父组件通过props向子组件传递数据。子组件通过props接收父组件传递的值。

react父子组件之间如何通信

// 父组件
function Parent() {
  const data = "Hello from Parent";
  return <Child message={data} />;
}

// 子组件
function Child(props) {
  return <div>{props.message}</div>;
}

子组件向父组件传递数据
父组件通过传递回调函数给子组件,子组件调用该函数并传递数据。

react父子组件之间如何通信

// 父组件
function Parent() {
  const handleData = (data) => {
    console.log(data); // 输出子组件传递的数据
  };
  return <Child onSendData={handleData} />;
}

// 子组件
function Child({ onSendData }) {
  const sendData = () => {
    onSendData("Data from Child");
  };
  return <button onClick={sendData}>Send Data</button>;
}

使用Context跨层级通信
适用于深层嵌套组件,避免逐层传递props

import React, { createContext, useContext } from "react";

const MyContext = createContext();

// 父组件
function Parent() {
  const value = "Shared Data";
  return (
    <MyContext.Provider value={value}>
      <Child />
    </MyContext.Provider>
  );
}

// 子组件
function Child() {
  const contextValue = useContext(MyContext);
  return <div>{contextValue}</div>;
}

使用Ref直接操作子组件
父组件通过ref访问子组件的实例或DOM节点。

import React, { useRef } from "react";

// 子组件(需使用forwardRef)
const Child = React.forwardRef((props, ref) => {
  return <div ref={ref}>Child Component</div>;
});

// 父组件
function Parent() {
  const childRef = useRef();
  const handleClick = () => {
    console.log(childRef.current); // 访问子组件的DOM节点
  };
  return (
    <>
      <Child ref={childRef} />
      <button onClick={handleClick}>Access Child</button>
    </>
  );
}

选择通信方式的场景

  • 简单数据传递:优先使用props和回调函数。
  • 深层嵌套组件:使用Context减少中间层传递。
  • 需要直接控制子组件:使用ref(谨慎使用,避免破坏组件封装性)。

标签: 父子组件
分享给朋友:

相关文章

vue实现组件拖放

vue实现组件拖放

Vue 实现组件拖放的方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

uniapp组件写法

uniapp组件写法

Uniapp 组件的基本写法 Uniapp 的组件写法与 Vue 类似,支持单文件组件(.vue 文件)。一个基本的组件通常包含三个部分:<template>、<script>…

vue实现弹窗组件

vue实现弹窗组件

实现弹窗组件的基本结构 在Vue中创建一个弹窗组件通常需要三个核心部分:组件模板、样式和逻辑控制。弹窗组件应具备打开、关闭功能,并支持内容插槽或属性传入。 <template> &l…

vue 实现弹窗组件

vue 实现弹窗组件

Vue 弹窗组件实现 基础弹窗组件结构 创建一个名为Modal.vue的文件,定义弹窗的基础结构和样式: <template> <div class="modal-mask"…

vue实现头像组件

vue实现头像组件

Vue 头像组件实现 基础实现 创建一个可复用的头像组件,支持图片链接或文字缩写显示: <template> <div class="avatar" :style="ava…

vue组件实现注册

vue组件实现注册

Vue 组件注册的两种方式 全局注册 通过 Vue.component() 方法注册,注册后可在任意 Vue 实例中使用。通常在项目的入口文件(如 main.js)中操作: import Vue f…