当前位置:首页 > 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
分享给朋友:

相关文章

vue怎么实现组件缓存

vue怎么实现组件缓存

vue实现组件缓存的方法 在Vue中实现组件缓存可以通过内置的<keep-alive>组件完成,该组件能够缓存不活动的组件实例,避免重复渲染。 使用<keep-alive>基…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

如何启动react

如何启动react

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

react如何注销

react如何注销

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