全局状态管理Store

  • 通过发布订阅者模式封装一个全局Store
  • main/micro/store/index.js

    1. export const createStore = (initData = {}) => (() => {
    2. let store = initData
    3. const observers = [] // 管理所有的订阅者,依赖
    4. // 获取store
    5. const getStore = () => store
    6. // 更新store
    7. const update = (value) => {
    8. if (value !== store) {
    9. // 执行store的操作
    10. const oldValue = store
    11. // 将store更新
    12. store = value
    13. // 通知所有的订阅者,监听store的变化
    14. observers.forEach(async item => await item(store, oldValue))
    15. }
    16. }
    17. // 添加订阅者
    18. const subscribe = (fn) => {
    19. observers.push(fn)
    20. }
    21. return {
    22. getStore,
    23. update,
    24. subscribe
    25. }
    26. })()
  • 我们通过闭包,来缓存我们的要管理的数据

    主应用使用全局状态管理

  • 在主应用中创建全局Store实例,并订阅数据更新

  • main/src/utils/startMicroApp.js ```javascript import { registerMicroApps, start, createStore } from ‘../../micro’;

const store = createStore(); window.store = store;

store.subscribe((newValue, oldValue) => { console.log(newValue, oldValue); })

  1. <a name="rz79H"></a>
  2. # 子应用获取数据并更新数据
  3. - vue3/src/main.js
  4. ```javascript
  5. const storeData = window.store.getStore()
  6. window.store.update({
  7. ...storeData,
  8. a: 778,
  9. })
  • 此时,我们在页面上访问的时候,会发现主应用监听到了数据的改变

    注意

  • 需要注意的是,此方式,在子应用中监听数据变化,需要先订阅,才能监听到,

  • 否则数据更新了,是无法监听到数据变化的。