qiankun微前端主应用给子应用传组件

主应用给子应用传值是在注册的时候通过 props 进行传递

例如以下是我注册时候主应用的代码:


import { registerMicroApps, start  } from 'qiankun';
import test from './components/test.vue'

// 注册
registerMicroApps([
  {
    name: 'vueApp',
    entry: '//localhost:7500',
    container: '#container',
    activeRule: '/vue2',
    props: {
      test: test,
    },
  },
]);

// 开启
start();
我想把 test 组件传递给子应用使用,这里写的是可以的,但是需要注意:

主应用和子应用尽量使用相同的框架,不然可能会有兼容问题,我之前就是主应用使用的是vue3,但是子应用使用的是 vue2,结果在子应用中使用就出现了问题

不过其实也还有另外一种方案

 另一种方案:共享 npm 包

如果公用组件较为复杂且多个子应用都需要使用,可以考虑将其独立为一个 npm 包。这样,主应用和子应用都可以单独安装该包,而无需通过 props 传递。

### 解决方案概述 在乾坤 (qiankun) 架构下的微前端环境中,多个 Vue 子项目之间的样式冲突是一个常见问题。为了有效管理这些样式并防止不同子应用之间的影响,可以采取多种策略来隔离和优化样式的加载与作用范围。 #### 使用 CSS Modules 实现局部样式封装 CSS Modules 是一种编写 CSS 的方式,它允许开发者通过模块化的方式定义样式类名,并自动将其转换为全局唯一的名称。这种方式能够有效地避免样式命名冲突[^1]。 ```css /* App.module.css */ .button { background-color: blue; } ``` ```javascript // 在组件中引入 import styles from './App.module.css'; export default function App() { return ( <button className={styles.button}>Click me</button> ); } ``` #### 应用 Shadow DOM 进行样式完全隔离 Shadow DOM 提供了一种更彻底的方法来实现样式隔离。每个子应用程序可以在其根节点上创建独立的 shadow root,在此内部定义的所有样式仅对该shadow tree生效,不会泄漏到其他部分[^2]。 ```html <!-- 创建带有封闭边界的DOM结构 --> <div id="app"></div> <script type="module"> const appContainer = document.getElementById('app'); const shadowRoot = appContainer.attachShadow({ mode: 'closed' }); shadowRoot.innerHTML = ` <style> .container { color: red; } </style> <p class="container">This text is styled only within this component's shadow DOM.</p> `; </script> ``` #### 配置 Webpack 或 Vite 加载器插件 对于采用 Webpack 或者 Vite 构建工具链的应用程序来说,配置相应的 loader 插件也可以帮助处理多入口点下公共依赖项以及第三方库带来的潜在样式污染风险。例如 `mini-css-extract-plugin` 可以单独提取出各个子应用所需的 CSS 文件。 ```javascript // webpack.config.js 中的部分配置 { module: { rules: [ { test: /\.css$/, use: ['MiniCssExtractPlugin.loader', 'css-loader'], }, ], }, plugins: [new MiniCssExtractPlugin()], }, ``` #### 利用 scoped 属性限制样式的作用域 Vue 单文件组件支持 `<style>` 标签内的 `scoped` 属性,这使得所写的样式只应用于当前组件及其后代元素,从而减少了跨组件间意外覆盖的可能性。 ```html <template> <div class="example">Scoped style example</div> </template> <style scoped> .example { font-size: 2em; color: green; } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值