qiankun 找不到入口问题彻底解决

针对 “qiankun 找不到入口问题” 的解决方案可以分成以下几个步骤:

第一步:正确使用 qiankun 注册微应用

我们在使用 qiankun 时需要在主应用中注册微应用,通常我们会这样来进行配置:

registerMicroApps([
  {
    name: 'sub-app',
    entry: '//localhost:8080',
    container: '#subApp',
    activeRule: '/sub'
  }
])

其中 registerMicroApps 方法用于注册微应用,参数为一个数组,其中每个元素为一个微应用的配置项。这里的配置项包括应用的名称(name)、微应用的 URL 入口(entry)、微应用的容器选择器(container)以及微应用的激活规则(activeRule)。

但是如果我们使用了一些框架,比如 Vue、React 等,在这些框架中使用路由时,微应用的激活规则需要进行调整,具体调整方法可以查看 官方文档-微应用路由和菜单示例

第二步:确保主应用与微应用间正确传递通讯

在主应用与微应用之间进行通讯时,我们需要使用window.addEventListener方法监听派发事件以及window.dispatchEvent方法派发事件。举个例子,如果我们希望主应用与微应用之间进行值传递,我们需要这样编写代码:

// 在主应用中派发事件进行传递
window.dispatchEvent(new CustomEvent('from-main', { detail: 'Hello from Main' }))

// 在微应用中监听事件进行接收
window.addEventListener('from-main', ({ detail }) => {
  console.log(detail)  // Hello from Main
})

这里需要注意的是,CustomEvent会自动传递 event 参数,而第二个参数 { detail: 'Hello from Main' } 会作为 detail 参数传递到事件接收方。

示例一:微应用中使用vue时的 qiankun 找不到入口问题

在使用 qiankun 时,如果我们在微应用中使用了 Vue 框架,则需要借助 vue-router 实现路由配置。假设我们有一个 Vue 微应用,路由使用的是 Vue Router,我们需要对路由进行以下调整:

const router = new VueRouter({
  base: window.__POWERED_BY_QIANKUN__ ? '/sub' : '/',
  mode: 'history',
  routes
})

new Vue({
  router,
  render: (h) => h(App),
}).$mount('#app')

这里的调整主要针对路由的 base 配置项,如果当前是子应用,则 base 配置项应该设置为 /sub,否则置为空字符串即可。

示例二:使用 qiankun 时的多次注册问题

在使用 qiankun 时,我们需要保证注册微应用只调用一次,如果多次调用会出现找不到入口的问题。所以我们在主应用中需要如下进行调整:

// 将 registerMicroApps 方法调整为一次性注册
let isMicroAppRegistered = false;

function registerMicroApp() {
  if(isMicroAppRegistered) return;
  registerMicroApps([
    {
      name: 'sub-app',
      entry: '//localhost:8080',
      container: '#subApp',
      activeRule: '/sub'
    },
    // ...
  ]);
  isMicroAppRegistered = true;
}

// 在某个合适的时机调用 registerMicroApp 方法注册微应用

这里我们加入了一个判断变量 isMicroAppRegistered,确保 registerMicroApps 方法只被调用了一次。并且将 registerMicroApps 方法单独提取成一个函数,在合适的时机进行调用即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:qiankun 找不到入口问题彻底解决 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • rabbitmq彻底卸载

    RabbitMQ彻底卸载 RabbitMQ是一个开源的消息队列系统,可以用来实现分布式应用程序之间的消息传递。虽然RabbitMQ使用简单且可靠,但在某些情况下,你可能需要彻底卸载它。本文将介绍如何在Windows和Linux操作系统上彻底卸载RabbitMQ。 Windows下卸载RabbitMQ 停止RabbitMQ服务 在开始卸载RabbitMQ之前,…

    其他 2023年3月28日
    00
  • linux下输入长文件名小技巧

    当在Linux系统下输入长文件名时,我们经常会遇到一些棘手的问题。比如有些文件名很长并且包含了一些特殊字符,如空格、括号等,这些特殊字符会造成文件与目录的定位困难,从而使得命令执行失败。以下是几种Linux下输入长文件名的小技巧,可以很好地解决这些问题。 1. 使用反斜线 反斜线()是Linux中一个特殊字符,它可以用来转义其他特殊字符。在输入长文件名时,我…

    other 2023年6月26日
    00
  • java获取当前目录方法整理

    Java获取当前目录方法整理 在Java中,获取当前目录是一项常见的任务。本文将介绍几种获取当前目录的方法,并提供两个示例说明。 方法一:System.getProperty() System.getProperty()方法可以获取当前工作目录。以下是一个示例: String currentDirectory = System.getProperty(&qu…

    other 2023年5月7日
    00
  • iOS自带原生二维码扫描的实现

    下面就是详细讲解iOS自带原生二维码扫描的实现的完整攻略: 一、引入AVFoundation库 首先,我们需要引入AVFoundation库,来实现二维码扫描。在xcode中选择你项目的targets中的Build Phases,在Link Binary With Libraries中添加AVFoundation.framework。 二、继承AVCaptu…

    other 2023年6月26日
    00
  • 详解Java中类的加载顺序

    下面是详解Java中类的加载顺序的完整攻略: Introduction 在Java中,一个类的加载顺序可能会对程序的执行产生重要影响,因此了解类加载顺序十分重要。本文将对Java中的类加载机制进行详细介绍,并提供相应的示例。 Java类加载的原理 当Java程序运行时,所需要的类不是在一开始就全部加载到内存中,而是根据需要逐个加载的。Java类加载器是负责加…

    other 2023年6月27日
    00
  • eclipse项目怎么重命名? eclipse类重命名的技巧

    Eclipse项目重命名 在Eclipse中,重命名项目是一项常见的操作,可以帮助我们管理和维护项目。下面是重命名Eclipse项目的详细步骤: 在Eclipse中,右键单击要重命名的项目,在弹出菜单中选择”Refactor”(重构)和”Rename”(重命名)。 在弹出的对话框中,输入新的项目名称,并点击”OK”。 Eclipse会自动更新项目名称,并将其…

    other 2023年6月28日
    00
  • Kotlin中的一些技巧与迂回操作分享

    Kotlin中的一些技巧与迂回操作分享 介绍 在Kotlin中,有些技巧和操作可以极大地提高我们的开发效率和代码的质量。本文将分享一些常用的Kotlin技巧和迂回操作,希望对开发Kotlin应用程序有所帮助。 技巧和操作 ?. 操作符 在Java中,为了避免NullPointerException异常,我们需要像下面这样判断变量是否为空: if (str !…

    other 2023年6月26日
    00
  • MySQL优化之大字段longtext、text所生产的问题

    MySQL优化之大字段longtext、text所产生的问题主要包括以下几个方面: 存储空间占用问题:长文本字段占用的存储空间比较大,容易导致表格的数据量非常庞大,从而使查询速度变慢,需要进行碎片整理。 查询效率问题:长文本字段的大小限制比较大,可能会导致查询效率变慢,甚至无法查询出结果,需要进行适当的优化设置。 索引优化问题:长文本字段在建立索引时需要考虑…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部