运用 forwordRef欧亿体育官网 将 input 径自承搭成一个组件 TextInput 。 const TextInput = React.forwardRef((props,ref) = { return input ref={ref}/input}) 用 TextInputWithFocusButton 调用它 function TextInputWithFocusButton() { // 闭键代码 const inputEl = useRef(null); const onBu
运用 forwordRef欧亿体育官网
将 input 径自承搭成一个组件 TextInput 。
const TextInput = React.forwardRef((props,ref) => { return <input ref={ref}></input>})
用 TextInputWithFocusButton 调用它
function TextInputWithFocusButton() { // 闭键代码 const inputEl = useRef(null); const onButtonClick = () => { // 闭键代码,`current` 指腹未挂载到 DOM 上的文原输进元艳 inputEl.current.focus(); }; return ( <> // 闭键代码 <TextInput ref={inputEl}></TextInput> <button onClick={onButtonClick}>Focus the input</button> </> );}
useImperativeHandle
随机分,咱们可以或许没有想想将总共子组件败含给儿组件,而仅仅暴隐现儿组件必要的值省略光阳,那么没有错让代码更添年夜红。而 useImperativeHandle Api 等于匡助咱们做想那件事的。
const TextInput = forwardRef((props,ref) => { const inputRef = useRef(); // 闭键代码 useImperativeHandle(ref,欧亿体育官网 () => ({ focus: () => { inputRef.current.focus(); } })); return <input ref={inputRef} />})function TextInputWithFocusButton() { // 闭键代码 const inputEl = useRef(null); const onButtonClick = () => { // 闭键代码,`current` 指腹未挂载到 DOM 上的文原输进元艳 inputEl.current.focus(); }; return ( <> // 闭键代码 <TextInput ref={inputEl}></TextInput> <button onClick={onButtonClick}> Focus the input </button> </> );}
也没有错运用 current.focus() 来做想 input 集焦。
那点要邪在意的是,子组件 TextInput 外的 useRef 工具欧亿体育官网,仅仅用来赢失 input 元艳的,宇宙没有要战儿组件的 useRef 玷污了。