在本文中,我们将探索一种通过删除专用错误页面微前端来简化单 Spa 微前端架构的方法
拥有一个基于微前端架构的项目有其好处,但也存在一些挑战。
挑战之一是微前端数量不可避免的增长。这种增长意味着将有更多的微前端需要维护、更新和发布。减少微前端的数量可确保更流畅的开发体验。
为了减少微前端的数量,我们可以将一些现有的功能迁移到已经存在的微前端中。我们需要小心地这样做,因为这会导致我们打破单一责任原则。
如果删除一个仅用于渲染错误页面的微前端该有多好?
删除单 Spa 中的 404 微前端
在 single-spa 中,要添加用 React 编写的 404 页面,您必须有一个单独的应用程序微前端来显示 404 错误。
通常这是在布局定义中完成的:
<route default> <application name="error-microfrontend"></application> </route>
摆脱错误微前端可能很棘手。
A) 将 React 重构为 HTML ?
single-spa 路由是在 HTML 中定义的,这意味着如果你想渲染一个 React 组件,将很难包含所有逻辑(特别是如果你在组件中使用自定义逻辑)。所以这不是一个可行的选择。
B) 传递 customProps ?
您还可以尝试通过向其传递 customProps 将其替换为现有的微前端:
// top-level layout engine API const singleSpaRoutes = constructRoutes(template, { props: { errorPage: true }, loaders: {}, }); ... // single-spa-template <route path="/test"> <application name="global-microfrontend"></application> </route> <route default> <application name="global-microfrontend" customprops="errorPage"></application> </route>
由于某种原因,这不起作用。在 global-microfrontend 中无法访问 customProps。
我尝试了多种方法来做同样的事情,甚至更改全局微前端的 loadRootComponent:
const lifecycles = singleSpaReact({ React, ReactDOM, loadRootComponent: (props) => { console.log(props); return Promise.resolve(() => <root></root>); }, });
这也不起作用,这很奇怪,因为如果我查看constructApplications的返回:
// usage const applications = constructApplications({ loadApp: ({ name }) => globalThis.System.import(name), routes, }); // result ... name: 'global-microfrontend', app: f(), customProps: f(e, n), activeWhen: [ 0: f $(), 1: f(n) ]
似乎 single-spa 知道全局微前端将安装在 2 条路线上,其中一条路线带有自定义道具。
我认为这种方法行不通,因为 single-spa 合并了 props。
C) 哈克方式?
由于没有任何效果,而且我真的很想摆脱微前端的错误,所以我想出了一个解决方法:
// single-spa-template <route default> <div id="PAGE_NOT_FOUND"></div> </route>
在全局微前端中,加载到应用程序的顶层:
import React, { useEffect, useState } from "react"; const ErrorContent = () => ( <div> <h1 id="not-found">404 not found</h1> <h3 id="Please-try-visiting-another-page">Please try visiting another page</h3> </div> ); const ErrorPage = () => { const [visible, setVisible] = useState<boolean>(false); const checkForPageNotFound = () => { const el = document.getElementById("PAGE_NOT_FOUND"); setVisible(!!el); }; useEffect(() => { window.addEventListener("single-spa:routing-event", checkForPageNotFound); checkForPageNotFound(); return () => window.removeEventListener("single-spa:routing-event", checkForPageNotFound); }, []); return visible ? <errorcontent></errorcontent> : null; }; export default ErrorPage; </boolean>
这是通过侦听 single-spa:routing-event 事件来实现的,每次触发该事件时,我们都会检查我们在布局定义中添加的 div 是否存在。由于 div 仅在默认路由中渲染,这意味着我们可以自信地渲染 404 页面的内容。
虽然这可能不是最优雅的解决方案,但它使我们能够将 404 逻辑封装在现有的微前端中,并摆脱另一个需要维护的微前端。
如果您发现了其他用于简化基于微前端的架构的创意解决方案,我很想听听您的经验!
以上是single-spa:没有额外微前端的路线的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)