jsmind
jsmind copied to clipboard
Feature support promised custom node render
支持 custom_node_render 返回一个 promise,在 promise 的 then 中再执行所有后续动作。 当 custom_node_render 的实现,是用 ReactDOM.render 等异步方式渲染的时候,若直接执行后续动作,因这时异步渲染还没有完成,会报很多错误。有了这个支持之后, 即可以通过 custom_node_render 接入 react 等异步组件库及其庞大生态了。
有几个说明:
- 因为 DocumentFragment 的 render_node + parent.appendChild 的实现。 第一次 React 渲染组件时没有问题。第二次 React 渲染同样的 dom 时(update_node触发)会报错拒绝渲染:
Warning: render(...): It looks like the React-rendered content of this container was removed without using React. This is not supported and will cause errors. Instead, call ReactDOM.unmountComponentAtNode to empty a container.
因为 react 认为组件容器的内容被改过了。为了规避这个问题,在第二次异步渲染时,新建了一个 dom 节点替换原来的节点。
- 将 jsmind 的一个优化的地方,就是编辑提交后, topic 没有修改时的短路逻辑删除了,和 topic 有修改时一样的处理。否则在 React 的场景总是会报错。
测试用例在单独的 react + jsmind 工程中: https://github.com/hqm19/jsmind-react
除了拖拽场景在react下还没调通,报错如上。其他的都已经按建议修改好提交了
此功能暂停支持,相关讨论参见: https://github.com/hizzgdev/jsmind/discussions/607 感谢 @hqm19 提交的优秀的 PR。