当前位置:首页 > React

react子如何传父

2026-03-10 19:17:03React

React 子组件向父组件传递数据的常用方法

回调函数(Props 传递函数)
父组件通过 props 向子组件传递一个回调函数,子组件调用该函数并传递数据。这是 React 中最基础的方法。
父组件示例:

function Parent() {
  const handleData = (data) => {
    console.log("子组件传递的数据:", data);
  };
  return <Child onData={handleData} />;
}

子组件示例:

function Child({ onData }) {
  const sendData = () => {
    onData("Hello Parent!");
  };
  return <button onClick={sendData}>传递数据</button>;
}

使用 Context API
适用于跨多层组件传递数据,避免逐层传递 props 的繁琐。
创建 Context:

const DataContext = React.createContext();
function Parent() {
  const [data, setData] = useState(null);
  return (
    <DataContext.Provider value={{ data, setData }}>
      <Child />
    </DataContext.Provider>
  );
}

子组件通过 useContext 修改数据:

function Child() {
  const { setData } = useContext(DataContext);
  return <button onClick={() => setData("Updated")}>更新数据</button>;
}

自定义事件(非 React 原生)
通过浏览器原生事件机制实现通信,适用于非父子关系的组件。
子组件触发事件:

react子如何传父

function Child() {
  const emitEvent = () => {
    const event = new CustomEvent("childEvent", { detail: "Data from child" });
    window.dispatchEvent(event);
  };
  return <button onClick={emitEvent}>触发事件</button>;
}

父组件监听事件:

function Parent() {
  useEffect(() => {
    window.addEventListener("childEvent", (e) => console.log(e.detail));
    return () => window.removeEventListener("childEvent");
  }, []);
  return <Child />;
}

状态管理库(Redux/Zustand)
通过全局状态管理实现任意组件间通信,适合复杂应用。
以 Zustand 为例:
创建 store:

const useStore = create((set) => ({
  data: null,
  setData: (newData) => set({ data: newData }),
}));

子组件修改状态:

react子如何传父

function Child() {
  const setData = useStore((state) => state.setData);
  return <button onClick={() => setData("Global data")}>保存到Store</button>;
}

父组件读取状态:

function Parent() {
  const data = useStore((state) => state.data);
  return <div>{data}</div>;
}

使用 ref 和命令式方法
父组件通过 ref 调用子组件暴露的方法获取数据。
子组件暴露方法:

const Child = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    getData: () => "Data from method",
  }));
  return <div>Child Component</div>;
});

父组件调用方法:

function Parent() {
  const childRef = useRef();
  const handleClick = () => {
    console.log(childRef.current.getData());
  };
  return (
    <>
      <Child ref={childRef} />
      <button onClick={handleClick}>获取数据</button>
    </>
  );
}

方法选择建议

  • 简单场景:优先使用回调函数(Props 传递)。
  • 跨层级通信:考虑 Context API 或状态管理库。
  • 解耦需求:自定义事件或状态管理库更灵活。
  • 需要主动获取子组件数据:ref 方法更直接。

标签: react
分享给朋友:

相关文章

react如何注销

react如何注销

React 组件的注销方法 在 React 中,组件的注销通常指的是在组件卸载时执行清理操作,例如取消订阅、清除定时器或释放资源。以下是几种常见的方法: 使用 useEffect 钩子的清理函数…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location.rel…

react如何清空state

react如何清空state

清空 React 组件的 state 在 React 中清空 state 可以通过多种方式实现,具体取决于组件的类型(类组件或函数组件)以及 state 的结构。 类组件中清空 state 在类组件…

react详情如何展示

react详情如何展示

React 详情展示的实现方法 在 React 中展示详情内容可以通过多种方式实现,具体取决于应用场景和需求。以下是几种常见的实现方案: 条件渲染 利用状态管理控制详情内容的显示与隐藏。通过点击事件…

react如何部署linux

react如何部署linux

部署 React 应用到 Linux 服务器的步骤 构建生产环境代码 在本地开发环境中运行构建命令,生成优化后的静态文件: npm run build 这会生成一个 build 目录,包含所有压缩和…

react如何创建数组

react如何创建数组

创建数组的方法 在React中创建数组与普通JavaScript相同,可以使用多种方式。以下是常见的几种方法: 使用数组字面量 const array = [1, 2, 3, 4]; 使用Arra…