当前位置:首页 > React

react 父子组件如何通信

2026-03-10 17:50:10React

父子组件通信方法

在React中,父子组件通信主要通过props和回调函数实现。以下是几种常见方式:

父组件向子组件传递数据 通过props将数据从父组件传递给子组件。

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

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

子组件向父组件传递数据 通过回调函数将子组件的数据传递回父组件。

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

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

使用Context API 对于深层嵌套的组件,可以使用Context API避免prop drilling。

const MyContext = React.createContext();

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

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

使用Refs 父组件可以通过ref直接调用子组件的方法。

// 子组件
const Child = React.forwardRef((props, ref) => {
  React.useImperativeHandle(ref, () => ({
    childMethod: () => {
      console.log("Child method called");
    }
  }));
  return <div>Child Component</div>;
});

// 父组件
function Parent() {
  const childRef = React.useRef();
  const callChildMethod = () => {
    childRef.current.childMethod();
  };
  return (
    <>
      <Child ref={childRef} />
      <button onClick={callChildMethod}>Call Child Method</button>
    </>
  );
}

状态提升 当多个子组件需要共享状态时,可以将状态提升到共同的父组件。

react 父子组件如何通信

// 父组件
function Parent() {
  const [count, setCount] = React.useState(0);
  return (
    <>
      <ChildA count={count} />
      <ChildB setCount={setCount} />
    </>
  );
}

// 子组件A
function ChildA({ count }) {
  return <div>Count: {count}</div>;
}

// 子组件B
function ChildB({ setCount }) {
  return <button onClick={() => setCount(c => c + 1)}>Increment</button>;
}

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

相关文章

vue轮播组件实现

vue轮播组件实现

vue轮播组件实现方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入: <template> <div cl…

vue动态组件实现

vue动态组件实现

动态组件的基本用法 在Vue中,动态组件通过<component>标签和is属性实现。is属性可以绑定组件名称或组件选项对象,实现动态切换。 <template> <…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent] =…

vue 实现弹窗组件

vue 实现弹窗组件

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

实现vue全局组件

实现vue全局组件

注册全局组件 在Vue中注册全局组件可以通过Vue.component方法完成。该方法接受两个参数:组件名称和组件选项对象。全局注册的组件可以在任何Vue实例的模板中使用,无需再次注册。 impor…

vue实现组件跳转

vue实现组件跳转

vue实现组件跳转的方法 在Vue中实现组件跳转有多种方式,以下是常见的几种方法: 使用<router-link>进行导航 <router-link to="/path/to/c…