gpt4 book ai didi

typescript - 如何在 typescript + react native 中为主题功能组件正确设置/使用 ref

转载 作者:行者123 更新时间:2023-12-05 03:44:50 27 4
gpt4 key购买 nike

主要目标:我有两个 TextInput,我想模拟返回点击第一个 textInput 以将焦点设置到下一个 textInput。

让我们从设置开始(使用 typescript )

我有一个带有一些颜色设置的主题 TextInput,如下所示。如果提供,我设置/使用 forwardRef 传递 ref。据我所知,这似乎是正确的方法。但也许这是错误的。

export type TextInputProps = ThemeProps & RNTextInput['props'];

export const TextInput = React.forwardRef<RNTextInput, TextInputProps>((props, ref) => {
...
return <RNTextInput style={[{ backgroundColor, color }, style]} {...otherProps} ref={ref} />;
}

现在在我的屏幕上,我正在使用这个对象,并且在完成第一次输入时,我想将焦点放在这个对象上。代码看起来像这样..

const inputSecound = React.useRef<typeof TextInput>();
const handleFirstTextComplete = () => {
inputSecound.current.focus() // This does not work
}
...
<TextInput onSubmitEditing={handleFirstTextComplete} ...>
<TextInput ... ref={inputSecound}> //This also complains

知道如何在功能组件 + 自定义组件 + typescript 中正确实现这一点。

如果您想查看完整的设置,可在此处获得示例小吃。 https://snack.expo.io/@varesh.tapadia/useref-and-useforwardref

最佳答案

这应该可以解决您的问题。

interface CustomInputProps {
handleCompletion: () => void;
}

const CustomInput = React.forwardRef<HTMLInputElement, CustomInputProps>((props, ref) => {
return <input ref={ref}/>;
});

const Parent = () => {
const secondInputRef = useRef<HTMLInputElement>(null);
const handleCompletion = () => {
secondInputRef?.current?.focus();
}
return (<>
<CustomInput handleCompletion={handleCompletion} />
<CustomInput ref={secondInputRef} handleCompletion={() => {}} />
</>);
}

关于typescript - 如何在 typescript + react native 中为主题功能组件正确设置/使用 ref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66216635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com