Реагируй Родной. Как сохранить фокус на вводе текста, когда страница перерисовывается по таймеру
Я пишу приложение для таймера, использующее реагировать нативно на Android в Clojurescript (использование реагента, надеюсь, не важно).
у меня есть TextInput
где я принимаю текст от пользователя, чтобы назвать таймеры. Всякий раз, когда тикает мой таймер, все приложение для андроида рендерится заново, и я теряю фокус на TextInput
, Я сейчас пользуюсь onChangeText
чтобы сохранить набираемые символы, можно ли сфокусироваться на вводе текста, пока тикает таймер?
Благодарю.
1 ответ
Самое простое решение - позвонить this.refs.yourTextInput.focus()
внутри componentDidUpdate
метод. Однако это может привести к тому, что клавиатура будет анимирована вниз, а затем снова анимирована.
Корень проблемы в том, что ваше значение таймера и ваш TextInput совместно используют одну и ту же область видимости, поэтому при обновлении состояния таймер и TextInput повторно визуализируются через render
функция. В идеале вы можете:
Поместите текст таймера в пользовательский компонент и добавьте метод для этого пользовательского компонента, чтобы установить его собственное состояние. Это приведет к повторному рендерингу только пользовательского компонента, если состояние пользовательского компонента является обновляющимся.