Хорошо, я ещё раз изучил эту проблему сегодня и смог воспроизвести её после переключения виртуальной клавиатуры на телефоне на Gboard. Gboard иногда дважды генерирует события keydown и keyup на одно нажатие клавиши, и если это происходит с последней нажатой клавишей перед выбором эмодзи из автодополнения, возникает сбой.
Я не уверен, что заставляет Gboard дважды генерировать эти события, но похоже, что это зависит от того, что вы набрали, и от настроек Gboard.
Двойные события вызывают сбой из-за архитектуры нашей библиотеки автодополнения. Библиотека слушает как события keydown, так и keyup: при keydown она очищает подсказки автодополнения, а при keyup предлагает новые подсказки на основе нового термина автодополнения.
Однако существует небольшая защита/оптимизация, предотвращающая выполнение библиотекой дублирующей работы, когда термин не изменился с момента предыдущих подсказок, и именно здесь возникает проблема. Первая пара событий keydown и keyup корректно очищает старые подсказки и предлагает новые, как и ожидалось, но вторая ошибочная пара снова очищает подсказки при keydown, но не предлагает новые при keyup, поскольку термин автодополнения не изменился.
Единственное наименее «костыльное» «исправление», которое я могу придумать, — это убрать защиту/оптимизацию, чтобы библиотека всегда предлагала новые подсказки при keyup, но я не уверен, что это необходимо или оправдано.
Я знаю, что мы планируем переписать нашу библиотеку автодополнения в будущем (это один из самых старых участков кода в кодовой базе и отчаянно нуждается в переписывании), так что, возможно, эту ошибку можно отложить до момента переписывания?