主应用不限制,可接入qiankun或@umijs/plugin-qiankun
子应用使用@umijs/plugin-qiankun
main 主应用, 使用 @umijs/plugin-qiankun
main1主应用, 使用 qiankun
subApp 子应用,使用 @umijs/plugin-qiankun
npm i @umijs/plugin-qiankun -D
qiankun: { // 注册插件
slave: {}
}
修改package.json的name
主应用引用的地方项目名称在注册子应用的时候可以和子应用不一致, 但是在主应用中需要保持和注册子应用name一致
"name": "subApp"
npm i @umijs/plugin-qiankun -D
qiankun: { // 构建起配置子应用
master: {
// 注册子应用信息
apps: [
{
name: 'subApp', // 子应用name
entry: '//localhost:7000', // html entry,
}
sandbox: true, //是否启用沙箱
prefetch: 'all' //是否启用预加载
}
}
// 通过路由方式
// 1.配置路由
routes: [
{ path: '/subApp', microApp: 'subApp'}, //路由绑定方式
]
// 2.跳转
history.push({
pathname: '/subApp'
})
//通过组件化方式
import {MicroApp} from 'umi';
<MicroApp name="subApp"
isFull={isFull}
isFullChange={changeFull} />
// 主应用 app.st,下发数据
export function useQiankunStateForSlave() {
const [masterCount, setMasterCount] = useState(TestStore.count);
TestStore.setCount(masterCount)
return {
masterCount,
setMasterCount
}
}
// 主应用修改通信数据
import { useModel} from 'umi';
const { masterCount, setMasterCount }=useModel('@@qiankunStateForSlave')
setMasterCount( 修改的值 )
const masterProps = useModel('@@qiankunStateFromMaster');
masterProps.isFullChange()
// 主应用下发的数据都包含在内
console.log(masterProps)
npm i qiankun -S
import {registerMicroApps, start } from 'qiankun';
//注册
registerMicroApps([
{
name: 'subApp', //子应用项目名
entry: '//localhost:7000', // url
container: '#subapp', //挂载的节点
activeRule: '/',
}
]);
//自动启动
start({
prefetch: 'all',
strictStyleIsolation: true, //开启严格的样式隔离模式
})
//手动加载子应用
this.microApp = loadMicroApp({
name: 'subApp',
entry: '//localhost:7000',
container: '#root',
props: {
list: [7, 8, 9, 10]
}
})
通过initGlobalState定义全局通信方法,调用onGlobalStateChange, setGlobalState等进行数据更改,具体查看main2
qiankun: https://qiankun.umijs.org/zh/api
umi-qiankun-plugin:https://umijs.org/zh-CN/plugins/plugin-qiankun