#android #react-native #input #text #focus
Вопрос:
Когда экран загружается, я использую следующий код, чтобы сосредоточиться на :
useEffect(() => {
InteractionManager.runAfterInteractions(() => {
if (refText.current) {
refText.current.focus();
}
});
}, []);
Это работает, как и ожидалось. Однако на событии отправки потребности снова фокусируются.
function myEvent() {
if (refText.current) {
refText.current.focus();
}
}
Это снова не фокусируется на тексте. Есть какие-нибудь идеи?
Комментарии:
1. Что, если вы попытаетесь обернуть его с помощью, скажем, 10 мс?
2. Привет @YaNuSH, я уже пробовал, но безуспешно 🙂
3. Не могли бы вы, пожалуйста, добавить часть, из которой вызывается метод «MyEvent»? Лучше, если вы опубликуете минимальный код для воспроизведения проблемы или все содержимое файла, если он небольшой.
4. Я не вижу никаких проблем с текущим кодом, который вы опубликовали. если вы можете предоставить ссылку git с кодом, который может имитировать то же поведение, которое вы испытываете прямо сейчас, люди могут попробовать
5. Это действительно сработало, закомментировав весь остальной код. В итоге это оказался простой код spinner, который мешал ему работать. Я поменял его на другой, и это сработало!
Ответ №1:
На самом деле, я не знаю, зачем вам понадобилось if
бы заявление внутри обработчика отправки , чтобы сфокусироваться на TextInput
, но в любом случае, я предполагаю, что у вас есть обработчик событий в вашей Button
декларации. Например:
function App() {
const textRef = useRef();
const handleSubmit = () => {
if (textRef.current) textRef.current.focus();
};
return (
<View>
<TextInput placeholder="Input" ref={textRef}/>
<Button title="Submit" onPress={handleSubmit} />
</View>
);
}
});
Это прекрасно работает, как вы можете видеть в этой песочнице.
Комментарии:
1. Спасибо вам за ваши усилия! Это действительно сработало, закомментировав весь остальной код. В итоге это оказался простой код spinner, который мешал ему работать. Я поменял его на другой, и это сработало!