qiankun 应用之间数据传递

news2024/10/23 13:23:39

qiankun 应用之间数据传递

全局共享 initGlobalState

qiankun initGlobalState API 单击前往

qiankun 内部提供了 initGlobalState 方法用于注册 MicroAppStateActions 实例用于通信,该实例有三个方法,分别是onGlobalStateChange、setGlobalState、offGlobalStateChange。这几个方法其实看一下他们的英文就大概知道所对应做的事情了,下面直接通过一个案例演示一下

主应用注册

改造一下主应用的入口文件,下面是新加的和全局状态共享相关的。这里初始化了一个状态数据,并且将值给设置了,同时调用了监听改变,当值被改变后会触发对应回调。

补充这一段代码可以抽离为一个单独的文件(就像vue3当中单独写一个store一样,然后导出这个action),然后在你的主应用页面代码当中导入之后去通过setGlobalState改变值也是一样的(haha,这样就是在vue或者jsx当中用的咯,别突然被我这个写在入口当中的困住了)

import {registerMicroApps, start, initGlobalState} from 'qiankun';

// 全局状态管理
const state = {count: 1};

const action = initGlobalState(state);

action.onGlobalStateChange((value, prev) => {
  console.log('main app change', value, prev);
});

action.setGlobalState(state);

子应用获取

这里以vue3作为子应用来进行说明,同样的是对入口文件进行改造,在子应用接入qiankun的时候,我们要将对应的生命周期写上。在mount注册的时候会有一个props参数,在这个props当中就有我们所需要的全局共享对象。

let app: any;
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  createApp(App).use(router).use(ElementPlus).mount('#app');
} else {
  renderWithQiankun({
    mount(props) {
      app = createApp(App).use(router).use(ElementPlus);
      app.mount(props.container?.querySelector('#app'));
      console.log('vue app mount get props', props);
      props.onGlobalStateChange((state: any, prev: any) => console.log(`vue 子应用 [onGlobalStateChange - ${props.name}]:`, state, prev));
      props.setGlobalState({count: 100});
    },
  	// bootstrap、update、unmount三个生命周期省略。。。。
  });
}
优化

在子应用当中我们也可以把这个action单独抽离出来封装一下

function emptyAction() {
  // 警告:提示当前使用的是空 Action
  console.warn("Current execute action is empty!");
}

class Actions {

  // 默认值为空 Action
  actions = {
    onGlobalStateChange: emptyAction,
    setGlobalState: emptyAction
  };

  /**
   * 设置 actions
   */
  setActions(actions) {
    this.actions = actions;
  }

  /**
   * 映射
   */
  onGlobalStateChange(...args) {
    return this.actions.onGlobalStateChange(...args);
  }

  /**
   * 映射
   */
  setGlobalState(...args) {
    return this.actions.setGlobalState(...args);
  }
}

const actions = new Actions();
export default actions;

然后还是在入口文件的mount生命周期当中把props的action赋值给我们包的这个actions,也就是下面这样,然后再在其他地方用的时候导入这个actions就好了

import actions from './action.js';
actions.setActions(props);

在这里插入图片描述

观察者模式 & 发布订阅

js设计模式-观察者&发布订阅 单击前往

可以利用观察者模式或者发布订阅将数据给绑定在windows下,然后进行对应的监听处理

Props传值

在主应用当中注册子应用的时候可以通过props来进行值传递

registerMicroApps([
  {
    name: 'react app', // app name registered
    entry: '//localhost:7100',
    container: '#yourContainer',
    activeRule: '/yourActiveRule',
    // 通过这个将myData传递,子应用在mount中可以拿到这个prop里面的值
    props: myData
  }
]);

骚操作

localStorage

反正不管什么都往这里面塞,要拿的时候再从这里面拿

window

把要传的值挂载到window全局上,要拿的时候来window上拿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软宣布了新的“智能代理”功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Elasticsearch:Redact(编辑) processor

Redact 处理器使用 Grok 规则引擎来隐藏输入文档中与给定 Grok 模式匹配的文本。该处理器可用于隐藏个人身份信息 (Personal Identifying Information - PII),方法是将其配置为检测已知模式,例如电子邮件或 IP 地址。与 Grok 模式匹配的文本将被替换为可…

SpringBoot实现微信支付接口调用及回调函数(商户参数获取)

#1024程序员节 | 征文 # 一、具体业务流程 1. 用户下单 - 前端操作: - 用户在应用中选择商品、填写订单信息(如地址、联系方式等),并点击“下单”按钮。 - 前端将订单信息(商品ID、数量、价格等)发送…

深度学习的一些数学基础

数学基础 万丈高楼平地起 怎么说呢,学的数二对于这些东西还是太陌生了,而且当时学的只会做题,不知道怎么使用/(ㄒoㄒ)/~~ 所以记下来一些不太清楚的前置知识点,主要来自《艾伯特深度学习》,书中内容很多&#xff0c…

动手学深度学习9.6. 编码器-解码器架构-笔记练习(PyTorch)

本节课程地址:61 编码器-解码器架构【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:9.6. 编码器-解码器架构 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-percep…

cnn_lstm_kan模型创新实现股票预测

获取更多完整项目代码数据集,点此加入免费社区群 : 首页-置顶必看 1. 项目简介 A002-cnn_lstm_kan模型创新实现股票预测项目旨在通过结合卷积神经网络(CNN)、长短期记忆网络(LSTM)以及知识注意网络&#…

Java项目实战II基于微信小程序UNIAPP+SSM+MySQL的电子点餐系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今快节…

华为配置 之 Console线路配置

目录 简介: 知识点: 配置Console线路密码 1.密码认证模式 2.AAA认证模式 知识点: 总结: 简介: 使用PC模拟器与路由器相连(与交换机相连原理一样),在关机状态下,使用…

【CS常见问题】你用的是VS2019,最高支持.NET5.0,但是项目将.NET6.0设为目标无法运行,怎么办?

.NET版本问题 报错示例报错分析最简单的方法步骤 报错示例 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持 .NET 6.0 的 .NET SDK 版本。 ABFview C:\x…

Request2:Post请求和Json

百度翻译拿到自己想看的数据,下图查看请求到数据的请求 preview提前看下 取出对应的RequestUrl ,看出来要使用的话得用post请求 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json if __name__ "__main__":#1.指定…

『 Linux 』HTTPS

文章目录 HTTPS协议密钥加密的原因加密方式数据指纹网络通信加密方案及短板CA认证CA证书的细节以及如何保证服务端公钥的安全性和数据完整性 CA认证后对称加密与非对称加密配合使用的安全性中间人的攻击方式 HTTPS协议 HTTPS协议并不是一个独立的协议,其是一种以HTTP协议为基础…

武汉融资融券开户佣金最低是多少?哪家证券交易两融利率最低?

编辑搜图 请点击输入图片描述(最多18字) 目前两融开户利率是在4%—5%,每个人的融资融券利率都是不一样的。低利率是需要提前联系证券公司的工作人员协助您进行开户,工作人员会根据您的个人需求向与您商谈利率的优惠策略。投资者…

Excel常用操作培训

1 Excel基本操作 1.1 常用快捷键 1.1.1快捷键操作工作簿、工作表 1.1.2快捷键操作 1.1.3单元格操作 1.1.4输入操作 2.1 常见功能描述 2.1.1 窗口功能栏 excel有很多功能可以用,新建文档后,可以最上方,可以看到所有的功能栏目 2.1.2 剪切板…

Unity中使用UnityEvent遇到Bug

UnityEvent绑定过程中,放在Start()中绑定会报错(通过脚本添加UnityEvent事件脚本,绑定) 绑定事件放在OnEnable()中不会报错,但是依然不可以立刻添加UnityEvent事件脚本紧…

一些小概念和实战有用的知识

------------------------- IDEA是热保存,能一直crtlz撤销的,除非已经代码入库了,入库也能看到git上该文件历史记录/本地历史记录(看以前自己改了什么) -------------------------- 引用bean时候最好写明一下名字,防止以后有多…

双十一期间有哪些入手不亏的数码好物?这五款优质产品不容错过!

在这个令人期待的双十一购物狂欢节期间,我们总希望能以最实惠的方式,入手那些能够提升生活品质的数码好物。但是还有一些人还在犹豫考虑,不知道入手什么产品比较好,我也是特地挑选了五款实用又富有创意的数码产品,希望…

通过AI检测越权漏洞的指令

通过AI检测越权漏洞的指令 这段指令描述了一个AI的功能和工作流程,主要是用于比较两个HTTP响应数据包,以检测潜在的越权行为。以下是对其内容的详细介绍: 效果 先看一个简单的示例效果: 指令详情 指令详情: {&q…

快速上手C语言【下】(非常详细!!!)

目录 1. 指针 1.1 指针是什么 1.2 指针类型 1.2.1 指针-整数 1.2.2 指针解引用 1.3 const修饰 1.4 字符指针 1.5 指针-指针 1.6 二级指针 2. 数组 2.1 定义和初始化 2.2 下标引用操作符[ ] 2.3 二维数组 2.4 终极测试 3. 函数 3.1 声明和定义 3.2 传值调用…

Java最全面试题->Java基础面试题->JavaEE面试题->Web应用服务器面试题

文章目录 Web应用服务器面试题Tomcat是什么?Tomcat缺省端口是多少,如何修改?Tomcat 有那几种Connector 运行模式?什么是Servlet?Servlet请求过程?Tomcat执行流程?Tomcat部署方式?什么是JBoss ?在JBoss 7…

数据结构与算法:贪心算法与应用场景

目录 11.1 贪心算法的原理 11.2 经典贪心问题 11.3 贪心算法在图中的应用 11.4 贪心算法的优化与扩展 总结 数据结构与算法:贪心算法与应用场景 贪心算法是一种通过选择当前最佳解来构造整体最优解的算法策略。贪心算法在很多实际问题中都取得了良好的效果&am…