在react的函数式组件中,是否可以使用ref的方式,让父组件获取到子组件的状态?

作者站长头像
站长
· 阅读数 7

在react的函数式组件中,是否可以使用ref的方式,让父组件获取到子组件的状态的值?

我测试是不能的。

import ChildComp from './components/childComp'
import { useRef } from 'react'

export default function Home() {

  const childRef = useRef(0);

  return (
    <>
      <ChildComp ref={childRef} />  // 这会报错
    </>
  )
}
回复
1个回答
avatar
test
2024-06-30

要通过 ref 获取到子组件内的状态,需要使用 React.forwardRef() 来转发 ref 到子组件,并且要在子组件里使用useImperativeHandle配置返回的ref对象的内容。这样,子组件就可以将 ref 关联到内部的状态,从而使父组件能够获取到该状态。

例子如下:

import React, { useRef, useImperativeHandle, forwardRef } from 'react';

// 子组件
const ChildComponent = forwardRef((props, ref) => {
  const [childState, setChildState] = React.useState('Hello from child!');

  // 暴露方法给父组件,以便获取子组件内的状态
  useImperativeHandle(ref, () => ({
    getChildState: () => childState,
  }));

  return (
    <div>
      <p>{childState}</p>
      <button onClick={() => setChildState('Updated state')}>Update State</button>
    </div>
  );
});

// 父组件
const ParentComponent = () => {
  const childRef = useRef(null);

  const handleButtonClick = () => {
    if (childRef.current) {
      console.log(childRef.current.getChildState()); // 获取子组件的状态值
    }
  };

  return (
    <div>
      <ChildComponent ref={childRef} />
      <button onClick={handleButtonClick}>Get Child State</button>
    </div>
  );
};

export default ParentComponent;
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容