【发布时间】:2021-11-26 17:27:18
【问题描述】:
我正在创建一个组件“UsernameInput”,它呈现我的自定义“TextInput”组件:
const UsernameInput = forwardRef(
(
{
...
},
ref
) => {
...
return <TextInput ref={ref} />
});
我的 TextInput 组件向其父组件公开了一些功能:
const TextInput = forwardRef(
(
{
...
},
ref
) => {
...
useImperativeHandle(
ref,
() => ({
getText: () => text,
setText,
focus,
blur,
}),
[text]
);
...
});
现在...在我的 UsernameInput 组件中,我也想公开其他功能...
const UsernameInput = forwardRef(
(
{
...
},
ref
) => {
...
useImperativeHandle(
ref,
() => ({
getUsernameInformation: () => usernameInformation,
}),
[usernameInformation]
);
return <TextInput ref={ref} />
});
我遇到的主要问题是,如果我执行以下操作:
const usernameInputRef = useRef(null);
const handleOnSubmit = () => {
usernameInputRef.current.blur()
}
return (
<UsernameInput ref={usernameInputRef} ...
);
代码向我抛出异常“.blur() 未定义”。
似乎因为有两个useImperativeHandle,暴露的功能是重叠的。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
您需要在
UsernameInput中创建一个新的ref并使用它对UsernameInput中的TextInput进行操作,而无需传递相同的ref。 -
很好,可以用!!
标签: javascript reactjs react-native react-hooks