当前位置:首页 > 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 原生)
通过浏览器原生事件机制实现通信,适用于非父子关系的组件。
子组件触发事件:

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 }),
}));

子组件修改状态:

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>;
});

父组件调用方法:

react子如何传父

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代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工具…

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…