react modal 各种实现思路总结

2017-11-13  本文已影响0人  lzxxx

最近参与了 react 组件库的开发,做到我们常用的 modal 弹框的时候产生了一个疑问:实现方式有很多,有的要在已有的 dom 节点中保留一个挂载的位置,有的要每次弹窗关闭的时候都把挂载的节点也删除。在已经有的各种组件库中也用什么方法的都有。具体见这里

下面先大概捋一下实现的几种方法和使用场景,分别实现之后再评价他们各自的优缺点:

👉🏻使用场景:

  1. 传统的 react 渲染过程,即组件树的形式
  2. 在 已有的 html 中插入 modal 组件,通过 ReactDOM.render 挂载到 DOM

👉🏻实现方法:

  1. 组件从一开始就挂载在页面结构中,通过传递 props 或者控制 state 来操作组件内部 css 来控制消失展示,包括直接传值和通过 refs 调用组件的方法(配合场景一)
  2. 组件一开始就挂载在页面结构中,类似于 boron通过 props 控制 state 来操作 render 时候的返回值来控制显隐return (show ? <div> : null))(配合场景一)
  3. 组件一开始不在页面结构中,展示与否的状态父级自己维护,需要的时候再挂载组件。类似于react modal(配合场景一)
  4. 组件初始化时未挂载,但是挂载的目的节点保留在 DOM 结构中,然后同上操作 render 的返回值控制显隐。(配合场景二)
  5. 在 modal 展示结束之后删除挂载的节点,类似于react bootstrap中的 modal。这也意味着在弹出节点的时候我们需要创建新的节点供其挂载。可以通过在render方法外再封装一个方法实现。(可以考虑把这个提出成一个公共的方法,类似于createMountDiv这种意思,因为很多组件都有类似的问题,比如 alert 等)(配合场景二)

👉🏻总结

具体怎么选择需要结合业务的使用场景来决定。

_

参考文章:

https://segmentfault.com/q/1010000004915729
https://reactjsnews.com/modals-in-react?utm_source=wechat_timeline&utm_medium=social&from=timeline

上一篇下一篇

猜你喜欢

热点阅读