当前位置: 首页 > news >正文

qiankun 子应用怎样通过 props拿到子应用【注册之后挂载之前】主应用中发生变更的数据

场景描述:子应用需要在接口调用和页面渲染时,需要用到主应用登录之后拿到的用户数据
逻辑前提:
1、主应用在 main.js中通过 registerMicroApps注册了子应用
2、主应用登录之后将用户数据传递给子应用

>> 原先的做法(有问题)

【具体参考 qiankun #initGlobalState】这个数据传递的方法是没有问题的,只是不满足当前的场景
1、主应用在注册子应用时,在子应用的生命周期钩子afterMount方法中通过setGlobalState方法将用户数据传递出去

// main.js
registerMicroApps([{name: 'custproApp',entry: '/MicroCustpro/',container: '#appContainer',activeRule: 'app-custpro',},],{afterMount: [(app) => {// eslint-disable-next-lineconsole.log(`[base-app]: catch [${app.name}] afterMount`)qiankunActions.setGlobalState({userInfo: store.getters.userInfo})}],}
)

2、子应用在导出的生命周期钩子mount方法中通过onGlobalStateChange方法监听主应用的数据传递,从而拿到用户数据

// main.js
export async function mount (props) {console.log('[app-cust] vue app mounted, props from main framework', props)render(props)// 主应用通信props.onGlobalStateChange((state) => {const { userInfo = {} } = state// 用户信息保存if (userInfo) store.dispatch('initUserInfo', { ...userInfo })console.log('[app-cust]: catch [base-app] state')})
}

【问题现象】:主应用登录之后加载子应用,子应用加载之后最初调用的几个接口中并没有带上用户数据,页面渲染出来更早一点的部分也出现没有拿到用户数据的情况

【原因分析】:主应用在子应用 afterMount 加载完之后才传递的数据,子应用 mount 加载之后最初调用的接口,以及靠前一点的部分页面渲染,可能比子应用监测到主应用传递的数据更早发生

>> 修改后的做法

1、主应用在注册子应用时,在props中通过函数的方式返回主应用存储在全局状态 (vuex等)中的用户数据

// main.js
registerMicroApps([{name: 'custproApp',entry: '/MicroCustpro/',container: '#appContainer',activeRule: 'app-custpro',props: getUserInfo () => ({ userInfo: store.getters.userInfo })},]
)

2、子应用在导出的生命周期钩子mount方法中通过props从主应用的全局状态中取到用户数据

// main.js
export async function mount (props) {console.log('[app-cust] vue app mounted, props from main framework', props)if (props.getUserInfo) {// 用户信息保存const { userInfo } = props.getUserInfo()if (userInfo) store.dispatch('initUserInfo', { ...userInfo })console.log('---user---', userInfo.userName, userInfo.userId)}render(props)
}

相关文章:

  • 6个月Python学习计划 Day 6 - 综合实战:学生信息管理系统
  • 【系分】论文模版
  • 开源酷炫大数据可视化大屏html+eacher 100+套
  • 2025 海外短剧 CPS 系统开发:技术驱动下的全球化内容分销新范式
  • Spark、Hadoop对比
  • Day04
  • cursor-stats 实时监控 Cursor IDE 的使用情况和订阅状态
  • 体现物联网环境下安全防护的紧迫性 :物联网环境下的个人信息安全:隐忧与防护之道
  • Linux升级内核回退到旧内核启动
  • 2025上半年软考系统架构设计师选择题试题与答案
  • spring4第2课-ioc控制反转-依赖注入,是为了解决耦合问题
  • springboot--实战--大事件--用户接口开发
  • TS.43规范-1
  • winsock对话设计框架
  • 全志V853 mpp程序开发
  • [小白]Docker部署kingbase(人大金仓)数据库[超详细]
  • Linux `pwd` 命令深度解析与高阶应用指南
  • js判断当前设备是否为移动端
  • CSV数据处理全指南:从基础到实战
  • java 项目登录请求业务解耦模块全面
  • 网站描述如何写利于优化/关键词拓展工具有哪些
  • 济南网站建设靠谱公司/河南企业站seo
  • 西安知名网站建设公司排名/银川seo
  • 专业营销的网站建设公司排名/软件定制开发
  • 南京网站开发公司排名/顾问
  • 怎么做网站滑动图片部分/网站关键词优化