当前位置:首页 > React

react 如何获取子组件的值

2026-01-25 19:36:20React

使用 ref 获取子组件值

在父组件中通过 useRefcreateRef 创建 ref,并传递给子组件。子组件通过 forwardRef 暴露内部方法或值。

父组件示例:

import { useRef } from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const childRef = useRef();

  const handleClick = () => {
    console.log(childRef.current.getValue());
  };

  return (
    <div>
      <ChildComponent ref={childRef} />
      <button onClick={handleClick}>获取子组件值</button>
    </div>
  );
}

子组件示例:

import { forwardRef, useImperativeHandle, useState } from 'react';

const ChildComponent = forwardRef((props, ref) => {
  const [value, setValue] = useState('');

  useImperativeHandle(ref, () => ({
    getValue: () => value
  }));

  return <input value={value} onChange={(e) => setValue(e.target.value)} />;
});

通过回调函数传递值

子组件通过 props 接收父组件传递的回调函数,在值变化时主动调用回调。

父组件示例:

function ParentComponent() {
  const handleValueChange = (newValue) => {
    console.log('子组件值:', newValue);
  };

  return <ChildComponent onValueChange={handleValueChange} />;
}

子组件示例:

function ChildComponent({ onValueChange }) {
  const [value, setValue] = useState('');

  const handleChange = (e) => {
    const newValue = e.target.value;
    setValue(newValue);
    onValueChange(newValue);
  };

  return <input value={value} onChange={handleChange} />;
}

使用 Context 共享状态

当组件层级较深时,可以通过 Context 共享状态。

创建 Context:

const ValueContext = createContext();

function ParentComponent() {
  const [value, setValue] = useState('');

  return (
    <ValueContext.Provider value={{ value, setValue }}>
      <ChildComponent />
      <div>当前值: {value}</div>
    </ValueContext.Provider>
  );
}

子组件使用:

function ChildComponent() {
  const { setValue } = useContext(ValueContext);

  return <input onChange={(e) => setValue(e.target.value)} />;
}

使用状态管理库

对于复杂应用,可使用 Redux 或 Zustand 等状态管理库集中管理状态。

Zustand 示例:

react 如何获取子组件的值

import create from 'zustand';

const useStore = create((set) => ({
  childValue: '',
  setChildValue: (value) => set({ childValue: value })
}));

function ParentComponent() {
  const childValue = useStore((state) => state.childValue);
  return (
    <div>
      <ChildComponent />
      <div>子组件值: {childValue}</div>
    </div>
  );
}

function ChildComponent() {
  const setChildValue = useStore((state) => state.setChildValue);
  return <input onChange={(e) => setChildValue(e.target.value)} />;
}

标签: 组件react
分享给朋友:

相关文章

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

react如何打包

react如何打包

打包 React 项目的基本步骤 React 项目通常使用 create-react-app 或类似的脚手架工具创建,这些工具内置了打包功能。以下是打包 React 项目的详细方法: 安装依赖并构建…

react如何启动

react如何启动

启动 React 项目的步骤 确保已安装 Node.js React 需要 Node.js 环境运行,建议安装最新稳定版(LTS)。可通过以下命令检查是否已安装: node -v npm -v…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…

react如何筛选数据

react如何筛选数据

筛选数据的方法 在React中筛选数据通常涉及对数组的操作,结合状态管理和渲染逻辑。以下是几种常见的实现方式: 使用数组的filter方法 通过JavaScript数组的filter方法筛选数据,并…