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日

相关文章

  • js清除浏览器缓存

    以下是详细讲解“js清除浏览器缓存的完整攻略”的标准Markdown格式文本,包含两个示例说明: js清除浏览器缓存的完整攻略 在Web开发中,有需要清除浏览器缓存以确保最新的代码和资源被加载。本攻略将介绍js清除浏览器缓存的方法。 方法一:使用location.reload()方法 使用location.reload()方法可以强制浏览器重新加载页面并清除…

    other 2023年5月10日
    00
  • Java面试之如何获取客户端真实IP

    获取客户端真实IP是Java Web应用中常见的需求,例如统计网站访问量、IP地址的黑白名单限制等等。由于客户端与服务器之间可能经过代理等中间层,因此需要进行一定的处理才能获取到真实IP。 以下是获取客户端真实IP的完整攻略: 步骤1:获取HTTP请求相关对象 需要使用Java Web应用中的HttpServletRequest对象,代码如下: HttpSe…

    other 2023年6月27日
    00
  • Android百度地图应用之创建显示地图

    下面是详细讲解”Android百度地图应用之创建显示地图”的完整攻略。 准备工作 在进行百度地图的开发之前,我们需要先进行以下的准备工作: 注册百度开发者账号,进入百度开发者平台进行注册; 创建应用并获取AK,进入控制台,创建应用并获取AK; 下载Android SDK,并进行安装。 创建项目 打开Android Studio,创建一个新项目; 在”Proj…

    other 2023年6月27日
    00
  • C++ 的三种访问权限与三种继承方式

    C++中的三种访问权限为:public(公有)、private(私有)和protected(保护)。而C++中的三种继承方式为:public继承、private继承和protected继承。下面就为大家详细讲解一下这些内容。 三种访问权限 1. public public是一个允许最广泛的访问控制级别。在public访问级别下,外部用户可以通过对象(或指向对…

    other 2023年6月26日
    00
  • Javascript 一些需要注意的细节(必看篇)

    Javascript 一些需要注意的细节(必看篇) 在使用JavaScript编程时,有一些细节需要特别注意。本文将介绍一些常见的细节问题,并提供示例说明。 1. 变量声明和作用域 在JavaScript中,变量的声明和作用域是需要注意的重要细节之一。如果不小心处理变量声明和作用域,可能会导致意外的结果。 示例1:变量提升 console.log(x); /…

    other 2023年7月29日
    00
  • Java枚举(enum) 详解7种常见的用法

    Java枚举(enum) 详解7种常见的用法 Java中的枚举(enum)是一种特殊的数据类型,它允许我们定义一组有限的常量。枚举常常用于表示一组相关的常量,例如星期几、月份等。在本攻略中,我们将详细讲解Java枚举的7种常见用法,并提供示例说明。 1. 定义枚举类型 我们可以使用enum关键字来定义一个枚举类型。以下是一个表示星期几的枚举类型的示例: en…

    other 2023年8月6日
    00
  • 浅析BootStrap栅格系统

    浅析BootStrap栅格系统 什么是BootStrap栅格系统? BootStrap栅格系统是一种用于构建响应式网页布局的前端框架。它基于栅格系统的概念,将页面划分为12个等宽的列,通过在不同屏幕尺寸下的列的组合来实现灵活的布局。 栅格系统的基本原理 BootStrap栅格系统的基本原理是将页面划分为12个等宽的列,并通过CSS样式来控制每个列在不同屏幕尺…

    other 2023年7月28日
    00
  • 解决nuxt 自定义全局方法,全局属性,全局变量的问题

    解决Nuxt自定义全局方法、全局属性、全局变量的问题攻略 在Nuxt.js中,我们可以通过一些方法来解决自定义全局方法、全局属性和全局变量的问题。下面是一个完整的攻略,包含两个示例说明。 1. 使用插件 Nuxt.js提供了插件机制,可以用来定义全局方法、属性和变量。以下是使用插件的步骤: 步骤一:创建插件文件 在Nuxt.js项目的plugins目录下创建…

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