reactjs - Single SPA 中的 Material UI 主题冲突
问题描述
我正在尝试在单个 spa 中加载两个 React 微前端应用程序。但我在主题方面面临风格冲突。
index.ejs 中的 systemjs-import 映射
<script type="systemjs-importmap">
{
"imports": {
"single-spa": "https://cdn.jsdelivr.net/npm/single-spa@5.9.0/lib/system/single-spa.min.js",
"react": "https://cdn.jsdelivr.net/npm/react@16.13.1/umd/react.production.min.js",
"react-dom": "https://cdn.jsdelivr.net/npm/react-dom@16.13.1/umd/react-dom.production.min.js",
"@nviera/sos-react-header": "//localhost:8080/...sos-react-header.js",
"@nviera/sos": "//localhost:8081/...sos.js"
}
}
</script>
使用 index.ejs 中的模板
<template id="single-spa-layout">
<single-spa-router>
<nav class="topnav">
<application name="...sos-react-header"></application>
</nav>
<div class="main-content mt-16">
<route path="/">
<application name="sos"></application>
</route>
</div>
</single-spa-router>
</template>
根-config.js
const routes = constructRoutes(document.querySelector('#single-spa-layout'));
const applications = constructApplications({
routes,
loadApp({ name }) {
return System.import(name);
},
});
const layoutEngine = constructLayoutEngine({
routes,
applications,
active: false,
});
applications.forEach(registerApplication);
layoutEngine.activate();
start();
标头应用
主要应用
我在这里面临的问题是,我在包含 Paper 的标题中使用了 AppBar,并在主题中定义了自定义背景颜色。此背景颜色被另一个微前端(即“内容微前端”)覆盖
我们如何为单独的微前端分别封装主题并避免这种冲突?
解决方案
微前端之间的样式共享/覆盖是一个主要话题。您可以在这个单空间 css 文档中找到详细的概述。
简而言之,理想情况下,您需要在styleguide 实用程序模块中定义您的主题,或者将其作为root config 中的 props传递给微前端。
推荐阅读
- javascript - 为什么我的 D3 图表中的线反转了?
- vb.net - 如何使用 VB.net 打印多页
- python - 如何删除重复的列?在许多列中
- javascript - 获取 API 数据并呈现为 div 卡
- c++ - 无法弄清楚为什么我的函数没有读取整个数组
- struct - BigQuery 结构聚合
- ruby-on-rails - CI 上 Simplecov 的动态 last_run
- android - 使用 Android Studio(或其他 IDE)开发 Android 平台应用程序的正确方法是什么
- amazon-web-services - 如何获取存储在 S3 存储中的文件夹的 URL?
- javascript - 通过 jquery 或 js 添加 onchange 属性