React(Preact)渲染内容两次

React (Preact) renders content twice

在可编辑的前置元素上,我 运行 只有在按下回车键时才执行 onKeyDown 脚本,以避免文本中不需要的 HTML 元素。

render({}, {content}) {
        console.log("render: "+content);
        return <p contenteditable onKeyDown={this.handleKeyDown}>{content}</p>
}

handleKeyDown函数中,段落内容被改变,setState(content: newText)被调用,以便再次呈现内容。这导致新文本被写入两次。

当我键入 "hello world" 并在 "hello" 之后中断时,将导致 “你好
世界你好
世界

即使 handleKeyDown 和渲染函数记录了正确的字符串:
“你好
世界

我做错了什么?

使用contentEditable时,一般应使用dangerouslySetInnerHTML设置HTML内容。

  <div
    contentEditable
    dangerouslySetInnerHTML={{
      __html: value
    }}
  />

这里 working JSFiddle example 展示了如何做到这一点。