将 Draft.js 与试剂一起使用

Using Draft.js with Reagent

有没有人有幸为 Reagent 改编 Draft.js?如果立即通过 reagent/adapt-react-class 导入 Draft.js,则会出现相当大的编辑问题。光标跳跃,打字时符号消失,onChange 调用不正确 EditorState,随你便。

人们在 clojurians/reagent Slack 频道中报告了类似的问题,但目前似乎还没有解决方案。

如有任何帮助,我们将不胜感激。

只是一个想法(更多评论,但我还不能提供评论),因为——如果我没记错的话——:content-editable 属性在 Reagent 中以特殊方式处理:

既然问题好像是在Reagent调用Draftjs编辑器的时候出现的,那把Reagent-component转成React-component(使用reagent/reactify-component),再用这个"reactified" 组件作为 Reagent 中的反应组件,使用 reagent/create-element?我会假设 Reagent 然后不会干预 Draftjs 编辑器。

好的,感谢tonsky,我得到了答案。 Reagent/Rum 正在对 requestAnimationFrame 使用延迟渲染,但是 Draft.Editor 应该在设置 editorState 时立即重新渲染。

我们只需要在编辑器 onChange 被调用时为编辑器父组件调用 forceUpdate:

:editorState @editor-state-atom
:onChange    (fn [new-state]
               (reset! editor-state-atom new-state)
               (.forceUpdate @wrapper-state))

代码示例适用于 Reagent,适用于 Rum 的解决方案相同