1. 不同框架共存时的 DOM 所有权,为什么 React/Vue 各自管理节点会冲突?
请说明不同框架共存时 DOM 所有权冲突的原因,以及为什么 React/Vue 各自管理节点会冲突?
- 框架对 DOM 子树的独占管理
- 双渲染模型与虚拟 DOM 差异
- reconciled 与外部 DOM 变更的冲突
React 与 Vue 都采用声明式渲染 + 虚拟 DOM 差异对比,对它们管理的 DOM 子树拥有"所有权":框架假设子树完全由自己创建与更新,会用虚拟 DOM 做 diff 并直接操作真实 DOM。当多个框架同时管理同一块 DOM(或某框架在另一个框架管理的子树里插入自己管理的节点),会出现冲突:一方在 diff 时删掉或覆盖另一方创建的节点,导致状态丢失、渲染错乱、事件失效。核心原因是"DOM 所有权"唯一性——框架把子树当作自己的私有状态载体,无法意识到外部修改。工程上解决靠"隔离边界":各框架只管理自己挂载的根节点,跨框架用自定义元素、事件或 slot 通信,避免在同一子树内交叉管理。
冲突的本质是框架对 DOM 的独占假设与虚拟 DOM diff 的破坏性。理解"所有权"才能设计框架互操作,即用自定义元素等标准边界隔离各框架,避免交叉管理同一节点。