父组件可以通过子组件的forwardRef,进行控制子组件内的一个元素:如以下代码
import React, { forwardRef, LegacyRef, useRef } from 'react';
import logo from './logo.svg';
import './App.css';
//#region 子组件定义
const ChildComp = forwardRef(( props, ref: LegacyRef<HTMLInputElement> ) => {
return <>
<input value="我是子组件的input1" ref={ref} />
<input value="我是子组件的input2" />
<input value="我是子组件的input3" />
</>
})
//#endregion
function App() {
const inpRef = useRef(null)
const focusFn = () => {
console.log(inpRef.current)
}
return (
<div className="App">
<ChildComp ref={inpRef} />
<button onClick={focusFn}>点击打印当前inpuRef</button>
</div>
);
}
export default App;
但是我们知道子组件一般不仅仅有1个元素,这里的代码内有多个input元素,是否是在传输时候需要传输多个ref进行使用?还是说这里一个ref就足够使用了呢?比如要操作input2的value。
可以将 ref 传递成一个对象
父组件:
子组件:
一个ref的话,可以使用 https://zh-hans.react.dev/reference/react/useImperativeHandle