对于react modal的实现的一个小问题

#1

因为 modal 需要 mount 到对应的目标节点上去, 使用比如 ReactDOM.render或者 ReactDOM.unstable_renderSubtreeIntoContainer进行挂载,在比较 https://reactjsnews.com/modals-in-react 一文中提到的多种 modal 的实现,对于目标节点的处理主要有三种:
注:此处的目标节点是指 ReactDOM.unstable_renderSubtreeIntoContainer(this, component, containerNode) 中的 containerNode

  1. 像 react modal (https://reactcommunity.org/react-modal/) 关闭modal 后即移除,目标节点保持、不移除
  2. 像 react bootstrap 中的 modal (http://react-bootstrap.github.io/components.html#modals) 对目标节点,关闭modal 后即移除
  3. 像 boron(http://madscript.com/boron/) 等这类直接挂在原本的 dom tree 中,然后只需要移除对于 modal 节点即可
    所以说对于 modal 的最佳实践来说,究竟需不需要移除呢?
    此外,对于第三种实现,该实现是否有可能会影响布局,因为挂载在原本的 dom tree 中?
1 Like
#2

需不需要移除目标节点应该是视场景而定。
在react modal中,目标节点是使用者自己预先写好的DOM或者默认的body。所以目标节点不应该被删除。
而react bootstrap,目标节点应该是自己生成的,每次关闭后应当删除节点,否则每次点击弹出modal都生成一个div。(没看源码,只是猜想)
至于boron,看了看,布局使用了fixed,所以对原布局应该不会有影响。
好吧,事实证明会有影响。/(ㄒoㄒ)/~~