Как перефокусировать после события?

#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, который мешал ему работать. Я поменял его на другой, и это сработало!