在react的函数式组件中,是否可以使用ref的方式,让父组件获取到子组件的状态?
在react的函数式组件中,是否可以使用ref的方式,让父组件获取到子组件的状态的值?
我测试是不能的。
import ChildComp from './components/childComp'
import { useRef } from 'react'
export default function Home() {
const childRef = useRef(0);
return (
<>
<ChildComp ref={childRef} /> // 这会报错
</>
)
}
回复
1个回答
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;
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容