前端單頁應用微服務化解決方案7 - 靜態數據共享

文章轉發自 alili.tech前端

在前面的一些介紹,相信你對微前端已經有了一個相對完整的認知. 下面介紹一下,再開發過程當中個人一些小技巧與處理方法.git

動態入口

當有新的子模塊會掛載到項目中的時候,在UI中確定須要一個新的入口進入子模塊的UI. 而這樣一個入口,是須要動態生成的.github

例如:圖中左邊的菜單,不該該是代碼寫死的.而是根據每一個模塊提供的數據自動生成的.redux

否則每次發佈新的模塊,咱們都須要在最外面的這個框架修改代碼.這樣就談不上什麼獨立部署了.框架

靜態數據共享

想要達到上面所的效果,咱們能夠這樣作.frontend

// ~/common/menu.js

import { isUrl } from '../utils/utils'
let menuData = [
  {
    name: '模塊1',
    icon: 'table',
    path: 'module1',
    rank: 1,
    children: [
      {
        name: 'Page1',
        path: 'page1',
      },
      {
        name: 'Page2',
        path: 'page2',
      },
      {
        name: 'Page3',
        path: 'page3',
      },
    ],
  }
]
let originParentPath = '/'
function formatter(data, parentPath = originParentPath, parentAuthority) {
    ...
}

// 在這裏,咱們對外導出 這個模塊的菜單數據
export default menuData

複製代碼
// Store.js
import { createStore, combineReducers } from 'redux'
import menuDate from './common/menu'
import createHistory from 'history/createBrowserHistory'
const history = createHistory()
...

// 咱們拿到數據以後,用一個reducer函數返回咱們的菜單數據.
function menu() {
  return menuDate
}

...


// 最終以Store.js對外導出咱們的菜單數據,在註冊的時候,每一個應用均可以拿到這個數據了
export const storeInstance = createStore(combineReducers({ namespace: () => 'list', menu, render, to }))
複製代碼

當咱們的Base模塊,拿到全部子模塊的菜單數據,把他們合併後,就能夠渲染出正確的菜單了.函數

這只是一個小技巧,像這樣的技巧足以幫助咱們在代碼中完成不少想不到的事情. 這裏只是打開一個思路,後續還有更多的微前端小技巧相關的文章. 未完待續 ...微服務

相關文章

前端單頁應用微服務化解決方案1 - 思考spa

前端單頁應用微服務化解決方案2 - Single-SPA3d

前端單頁應用微服務化解決方案3 - 模塊加載器

前端單頁應用微服務化解決方案4 - 消息總線

前端單頁應用微服務化解決方案5 - 路由分發

前端單頁應用微服務化解決方案6 - 構建與部署

前端單頁應用微服務化解決方案7 - 靜態數據共享

前端單頁應用微服務化解決方案8 - 二次構建

Demo

前端微服務化 Micro Frontend Demo

微前端模塊加載器

微前端Base App示例源碼

微前端子項目示例源碼

相關文章
相關標籤/搜索