Реагируй Родной. Как сохранить фокус на вводе текста, когда страница перерисовывается по таймеру

Я пишу приложение для таймера, использующее реагировать нативно на Android в Clojurescript (использование реагента, надеюсь, не важно).

у меня есть TextInput где я принимаю текст от пользователя, чтобы назвать таймеры. Всякий раз, когда тикает мой таймер, все приложение для андроида рендерится заново, и я теряю фокус на TextInput, Я сейчас пользуюсь onChangeText чтобы сохранить набираемые символы, можно ли сфокусироваться на вводе текста, пока тикает таймер?

Благодарю.

1 ответ

Решение

Самое простое решение - позвонить this.refs.yourTextInput.focus() внутри componentDidUpdate метод. Однако это может привести к тому, что клавиатура будет анимирована вниз, а затем снова анимирована.

Корень проблемы в том, что ваше значение таймера и ваш TextInput совместно используют одну и ту же область видимости, поэтому при обновлении состояния таймер и TextInput повторно визуализируются через render функция. В идеале вы можете:

Поместите текст таймера в пользовательский компонент и добавьте метод для этого пользовательского компонента, чтобы установить его собственное состояние. Это приведет к повторному рендерингу только пользовательского компонента, если состояние пользовательского компонента является обновляющимся.

Другие вопросы по тегам