qiankun 样式隔离

如果用strictStyleIsolation: true,会用shadowDom的方式进行隔离。以及加上实验性的样式隔离特性experimentalStyleIsolation: true后,后续可能出现dialog等挂载到全局中时,某些同名样式(特别是同框架的情况下,样式名经常冲突)样式冲突。

而且会导致以下问题。
例如如果子应用用react18进行开发,挂载到id为root的dom上。(vue3的子应用目前没问题)
可能会在子应用跳转阶段出现子应用没法找到root这个元素,导致下面的报错。

application 'reactApp' died in status SKIP_BECAUSE_BROKEN: createRoot(...): Target container is not 

看报错是因为没获取到root元素,所以要去子应用中各个地方都要判断子应用是否获取到root的dom

function render() { // 函数这样写 为了解决root 多次渲染的问题
  if (!root) root = ReactDOM.createRoot(document.getElementById('root'))
  root.render(
    <React.StrictMode>
      <App />
    </React.StrictMode>
  )
}


if (!window.__POWERED_BY_QIANKUN__) { // 如果是一个独立运行的应用(不依赖基座 直接访问)
  render() // 直接渲染
}

export async function bootstrap(props) {
  console.log(props)
}
export async function mount(props) {
  root = ReactDOM.createRoot(props.container)
  render()
}
export async function unmount(props) {
  root.unmount()
}

下面来解决以下问题
如果用strictStyleIsolation: true,会用shadowDom的方式进行隔离。以及加上实验性的样式隔离特性experimentalStyleIsolation: true后,后续可能出现dialog等挂载到全局中时,某些同名样式(特别是同框架的情况下,样式名经常冲突)样式冲突。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.说说你对盒子模型的理解 当对一个文档进行布局(layout)的时候,浏览器的渲染引擎会根据标准之一的 CSS ...
    Ysrenacer1_bcfd阅读 2,192评论 0 19
  • 初识Vue2.0 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 vue容器里的代码依然符合htm...
    Zindex阅读 490评论 0 0
  • 1、目标 针对事业部前端开发业务场景考虑使用一个项目实例,通过微前端的方式去实现业务功能模块的解耦。 如果可以实现...
    秋名山车神lv阅读 3,153评论 0 0
  • 前言 为了金三银四的跳槽季做准备,并且我是vue技术栈的,所以整理了若干个vue的面试题。 每次看别人的博客,都会...
    93ac81ebff1e阅读 246评论 0 1
  • 前言 金九银十,又是一波跑路。趁着有空把前端基础和面试相关的知识点都系统的学习一遍,参考一些权威的书籍和优秀的文章...
    WEB前端含光阅读 640评论 0 2