Хорошо, я понимаю, что это будет очень длинный пример, но я полностью сбит с толку этим, поэтому решил, что я поделюсь им со всеми, а также пытаюсь найти решение.
Итак, я пытаюсь создать компонент ввода тегов, в который вы вводите текст, и всякий раз, когда вы вводите пробел, он добавляет эту строку в список, который вы передаете. Чтобы удалить один из тегов, вы Очистите область редактирования содержимого, нажмите клавишу Backspace один раз, чтобы «подготовить» последний тег в списке для удаления, а затем снова, чтобы подтвердить удаление. Это имеет смысл в контексте, но я написал сокращенную версию для примера. У меня есть следующие коды andbox:
https://codesandbox.io/s/8q0q3qw60
Теперь вот часть, которую я не понимаю.
Кажется, что все работает полностью так, как задумано, за исключением фактического удаления тега. По какой-то причине я могу соответствующим образом "подготовить" последний тег для удаления, однако, когда я снова нажимаю клавишу Backspace, чтобы подтвердить, по какой-то причине состояние (из ловушки) для prepTagForRemoval
в закрытии, которое является обратным вызовом keyDown для содержимого редактируемая область никогда не изменяется . Это всегда ложь, но только внутри обратного вызова ! Это приводит к тому, что тег никогда не удаляется надлежащим образом после подтверждения его удаления.
Чтобы повторить это ...
- открыть код песочницы ссылка
- нажмите на красную рамку (div-редактируемый контент)
- введите "привет" (без кавычек, поэтому привет, затем пробел
- привет переместится на строку выше с надписью «Метки:»
- нажмите клавишу Backspace один раз
- Заготовка для удаления теперь верна, и «привет» подсвечивается красным
- снова нажмите клавишу Backspace
В настоящее время на этом этапе должен только что удалить "hello" из строки "Tags:", однако в действительности он просто устанавливает prepForRemoval в false и снова делает hello black, без удаления "привет" из "Метки:"
Извините, если это сбивает с толку, я рад попытаться уточнить больше. Я действительно хочу, чтобы этот пример работал правильно и удалял последний тег (или, по крайней мере, вызывал onRemove) при повторном удалении. Надеюсь, кто-то может протянуть руку!