zoukankan      html  css  js  c++  java
  • 浅析qiankun主应用与微应用间如何通信解决微应用需要重复登录的问题

    一、问题背景

      当主应用登录后,再进去微应用发现还需要登录,相当于登录状态没有同步。

    二、解决方案  ——  主应用与微应用通信

      qiankun微前端应用间的通信,我们要利用qiankun框架的initGlobalStateMicroAppStateActions api,相关的api介绍如下:

    (1)setGlobalState:设置 globalState - 设置新的值时,内部将执行浅检查,如果检查到globalState发生改变则触发通知,通知到所有的观察者函数。

    (2)onGlobalStateChange:注册观察者函数 - 响应globalState变化,在globalState发生改变时触发该观察者函数。

    (3)offGlobalStateChange:取消观察者函数 - 该实例不再响应globalState变化。

      所以承接上篇,我们需要改造一下两个项目:

    1、首先是主应用的micros/index.js

    import {  
        registerMicroApps,  
        addGlobalUncaughtErrorHandler,  
        start,  
        initGlobalState // 新增
    } from "qiankun";
    
    const state = {} 
    const actions = initGlobalState(state);
    
    export {  actions }

    2、以上新增了并导出了actions,然后去到login.vue —— 登录之后通知所有微应用去同步登录状态

    import { actions } from "@/micros"; //新增
    
    const login = () => {      
      if (username.value && password.value) {  
        store.commit("setToken", "123456");        
        // 新增
        actions.setGlobalState({globalToken: "******"});        
        router.push({path: "/"});
      }
    };

      引入actions并新增了actions.setGlobalState方法,通知所有微应用

    3、然后是子应用的 main.js —— 主要是需要增加监听方法

    function render(props) {  
      console.log("子应用render的参数", props) 
      // 新增 
      props.onGlobalStateChange((state, prevState) => {    
        // state: 变更后的状态; prev 变更前的状态    
        console.log("通信状态发生改变:", state, prevState);    
        // 这里监听到globalToken变化再更新store
        store.commit('setToken', '******')  }, true); 
       // 挂载应用  
      instance = new Vue({    
        router,    
        store,    
        render: (h) => h(App),  
      }).$mount("#micro-app");
    }

      在render方法中我们加上onGlobalStateChange,并且第二位参数置为true,这样微应用一启动的时候,我们马上就可以看到刚刚设置的 globalToken:******

      这样经过改造之后,我们刷新重新登录主应用,然后点击微应用的菜单,可以看到微应用就不需要再登录了。

  • 相关阅读:
    [转]给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历
    C#后台发送HTTP请求
    asp.net 用户控件
    P1414 又是毕业季II
    P2254 [NOI2005]瑰丽华尔兹
    P1081 开车旅行
    P1084 疫情控制
    P1852 [国家集训队]跳跳棋
    P1074 靶形数独
    平时二十三测
  • 原文地址:https://www.cnblogs.com/goloving/p/14995114.html
Copyright © 2011-2022 走看看