#react-native #react-navigation
#react-native #реагирует-навигация
Вопрос:
У меня есть экран OTP, я добавил ссылку в первое TextInput
поле, чтобы при загрузке экрана он фокусировался:
// ref
const pin1 = useRef();
// navigation listener
navigation.addListener('focus', () => {
pin1.current.focus();
})
Но он возвращает ошибку:
TypeError: undefined is not an object (evaluating 'pin1.current.focus')
Этот код работает довольно хорошо:
navigation.addListener('focus', () => {
alert('Hello')
})
Комментарии:
1. вы передали эту ссылку в качестве реквизита для TextInput?
2. @TusharPandey да
3. не могли бы вы поделиться своим кодом или несколькими разделами, связанными с ним.
Ответ №1:
Я думаю, вам следует использовать autoFocus={true}
с вашим TextInput you, когда вы открываете экран, ваш TextInput автоматически фокусируется.
Проверьте автофокусировку
Комментарии:
1. Коротко и мило. Спасибо вам за это.
Ответ №2:
Вы должны проверить текущий объект перед вызовом любой функции.
navigation.addListener('focus', () => {
if (pin1.current) {
pin1.current.focus();
}
});
Ответ №3:
Встроить прослушиватель в useEffect
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
navigation.addListener('focus', () => {
pin1.current.focus();
})
}
return unsubscribe;
}, [navigation, pin1]);
также
<TextInput ref={pin1} />