Реагировать (сайт Preact) оказывает содержание в два раза
На редактируемом предварительном элементе я запускаю сценарий onKeyDown только при нажатии клавиши enter, чтобы избежать нежелательных HTML-элементов в тексте.
render({}, {content}) {
console.log("render: "+content);
return <p contenteditable onKeyDown={this.handleKeyDown}>{content}</p>
}
В функции handleKeyDown Содержание абзацев изменяется и setState(content: newText) вызывается таким образом, что содержание должно быть воспроизведено снова. Это приводит к тому, что новый текст пишется дважды.
Когда я наберу "hello world" и сломаюсь после "hello", это приведет к
"привет
worldhello
мир "
Несмотря на то, что handleKeyDown и функция render регистрирует правильную строку:
"привет
мир "
Что я здесь делаю не так?
1 ответ:
При использовании
contentEditableобычно следует использоватьdangerouslySetInnerHTMLдля задания содержимого HTML.<div contentEditable dangerouslySetInnerHTML={{ __html: value }} />Вот рабочий пример JSFiddle, показывающий, как это сделать.
Comments