React(Preact)渲染内容两次

时间:2017-02-01 14:46:24

标签: reactjs preact

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

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

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

当我输入“你好世界”并在“你好”之后打破它会导致 “你好 worldhello
世界“

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

使用contentEditable时,通常应使用dangerouslySetInnerHTML来设置HTML内容。

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

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