qiankun 微前端

微前端 react 基座(18版本), 子应用也全是react (17版本)

分为主应用和子应用:
主应用

  • 引入qiankun
  • 在入口文件index.js 配置路由
import { registerMicroApps, start } from 'qiankun'

const apps = [
 {
   name:'react_child1',   //子应用名字
   entry:"//localhost:3001",  //子应用口地址,子应用需要设置跨域
   container: "#container",  //子应用的容器
   activeRule:"/todo"//子应用的路由
 },
 {
   name:"react_child2",    
   entry:"//localhost:3002",
   container:"#root",
   activeRule:"/good"
 }
]
registerMicroApps(apps)
start()
  • app.js 配置路由
import { BrowserRouter as Router, Link } from 'react-router-dom'
function App() {
  return (
    <div className="App">
      <h1>base</h1>
      <Router>
        <Link to="/todo">react1</Link>
        <Link to="/good">react2</Link>
      </Router>
      <div id="container"></div>   //存放子应用的容器
    </div>
  );
}
export default App;

子应用

  • 安装 react-app-rewired 覆盖添加自己的webpack 配置
  • 根目录下创建config-overrides.js
module.exports = {
    webpack: (config) => {
        config.output.library = 'reactApp'
        config.output.libraryTarget = 'umd'   // umd格式打包
        config.output.publicPath = 'http://localhost:3001/' //访问当前子应用的path_base
        return config
    },
    devServer: (configFunction) => {
        return function(proxy,allowHost) {
            const config = configFunction(proxy,allowHost)
            config.headers = {
                'Access-Control-allow-Origin':"*"  //必须设置跨域,主应用通过fetch向子应用服务器发起请求,
            }
            return config
        }
    }
}
  • 子应用入口文件 封装render 函数 同时向主应用暴露生命周期方法
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

//对render函数进行fengzhuang
function render(props){
  console.log("props",props)
  const { container } = props;
  ReactDOM.render(<App></App>,container?container.querySelector("#root") :document.querySelector("#root"))
}
//非qiankun调用
if(!window.__POWERED_BY_QIANKUN__){
  ReactDOM.render(<App></App>,document.querySelector("#root"))
}
//qiankun环境下需要改变publicPath
if (window.__POWERED_BY_QIANKUN__) {
  // eslint-disable-next-line no-undef
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

//暴露bootStraped
export async function bootstrap(props){
  console.log("[child1] app bootstrapd")
}

//暴露挂载的方法
export async function mount(props){
  render(props)
}

//暴露卸载的方法
export async function unmount(){
	ReactDOM.unmountComponentAtNode(document.querySelector('#root'))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值