У меня возникла проблема с maxLength
на <TextInput/>
в ReactNative, и я почти уверен, что это происходит только на iOS.
Проблема:
Если последним символом ввода является эмодзи, и этот эмодзи ставит вас над номером maxlength
, тогда он удаляет весь ввод! Примером этого является то, что если maxLength
установлено в 5, а ввод - «xxxx» (4 символа), а затем вы добавляете смайлики, весь входной текст удаляется. Я уверен, что это как-то связано с смайликами, состоящими в основном из 2 персонажей, но я не могу найти "красноречивую" работу вокруг!
Закуска, чтобы точно понять, о чем я говорю:
(я смог воспроизвести его только в iOS) https://snack.expo.io/@sararan / textinput
То, что я пробовал:
- Добавление события
onKeyPress
(которое попадает до события onChangeText
), которое звонки e.stopPropagation()
и e.preventDefault()
(оба для хорошей меры;)). Но на самом деле это не останавливает событие, и я думаю, что это связано с тем, как реагирует на события, и, может быть, к этому времени оно уже всплыло? Извлечение maxLength
в целом и создание моих собственных правил, которые объединяют входные данные, если их длина превышает желаемую, а затем заменяют любые специальные символы, например ...
const onChangeText = (value) => {
if (value.length > 5) {
value = value.slice(0, 30).replace(/[^\w\s]/gi, '');
}
setText({ value });
};
, но это решение, похоже, вызывает мерцание, которое мы все ненавидим этими типами решений.
Мне интересно, сталкивался ли кто-нибудь с этим раньше и мог бы найти более красноречивое решение? Спасибо за помощь!