当前位置:首页 > React

react 父子组件如何通信

2026-01-24 09:36:31React

父子组件通信方法

父组件向子组件传递数据(Props)
父组件通过props将数据传递给子组件,子组件通过this.props(类组件)或直接解构(函数组件)接收。这是React中最基础的通信方式。

react 父子组件如何通信

// 父组件
<ChildComponent message="Hello from parent" />

// 子组件(函数式)
function ChildComponent({ message }) {
  return <div>{message}</div>;
}

子组件向父组件传递数据(回调函数)
父组件通过props传递一个回调函数给子组件,子组件调用该函数并传递参数实现数据回传。

react 父子组件如何通信

// 父组件
function Parent() {
  const handleData = (data) => console.log(data);
  return <Child onData={handleData} />;
}

// 子组件
function Child({ onData }) {
  return <button onClick={() => onData("Child data")}>Send</button>;
}

使用Context跨层级通信
当组件层级较深时,可通过React Context避免逐层传递props。创建Context后,父组件用Provider提供数据,子组件用useContextConsumer消费数据。

const MyContext = React.createContext();

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

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

Ref传递DOM或组件实例
父组件通过useRefcreateRef创建ref,并传递给子组件,可获取子组件的DOM节点或实例方法(需配合forwardRef)。

// 子组件(需用forwardRef包装)
const Child = forwardRef((props, ref) => {
  return <div ref={ref}>Child Element</div>;
});

// 父组件
function Parent() {
  const childRef = useRef();
  useEffect(() => {
    console.log(childRef.current); // 访问子组件DOM
  }, []);
  return <Child ref={childRef} />;
}

注意事项

  • 单向数据流:React遵循单向数据流,直接修改props会引发警告,应通过回调函数更新父组件状态。
  • 性能优化:避免在渲染函数中动态创建回调,可能导致子组件不必要的重新渲染。
  • Context使用场景:仅适用于跨多层级通信,简单场景仍建议使用props。

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

相关文章

vue 组件实现 遮罩

vue 组件实现 遮罩

Vue 组件实现遮罩层的方法 基础遮罩层实现 创建一个简单的遮罩层组件,使用绝对定位覆盖整个视口。以下是一个基础实现: <template> <div class="mask"…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pagina…

vue 滑杆组件实现

vue 滑杆组件实现

实现基础滑杆组件 使用Vue的v-model和原生<input type="range">实现基础功能: <template> <div> <i…

vue基础组件实现

vue基础组件实现

Vue 基础组件实现 组件定义 使用 Vue.component 全局注册或局部注册组件。全局注册适合通用组件,局部注册适合特定页面使用的组件。 // 全局注册 Vue.component('my-…

vue实现树形组件

vue实现树形组件

实现树形组件的基本思路 在Vue中实现树形组件通常涉及递归组件和动态数据渲染。核心是通过组件自身调用自身,逐层渲染嵌套的节点数据。 定义树形数据结构 树形数据通常是一个包含children属性的对象…

vue组件实现computed

vue组件实现computed

Vue 组件中实现 computed 的方法 在 Vue 组件中,computed 用于声明计算属性,根据依赖的响应式数据动态计算并返回结果。计算属性具有缓存机制,只有当依赖的数据发生变化时才会重新计…