mirror of
https://github.com/WeBankFinTech/fes.js.git
synced 2025-04-06 03:59:53 +08:00
fix: plugin-qiankun修复主应用更新数据子应用使用useModel可能无法响应问题
This commit is contained in:
commit
9e29bd7841
@ -46,7 +46,7 @@ Fes.js 是一个好用的前端应用解决方案。提供覆盖编译构建到
|
|||||||
|
|
||||||
- 📦 __可扩展__ ,借鉴Umi实现了完整的生命周期和插件化机制,插件可以管理项目的编译时和运行时,能力均可以通过插件封装进来,在 Fes.js 中协调有序的运行。
|
- 📦 __可扩展__ ,借鉴Umi实现了完整的生命周期和插件化机制,插件可以管理项目的编译时和运行时,能力均可以通过插件封装进来,在 Fes.js 中协调有序的运行。
|
||||||
|
|
||||||
- 📡 __面向未来__ ,在满足需求的同时,我们也不会停止对新技术的探索。已使用Vue3.0来提升应用性能,已使用webpack5提升构建性能和实现微服务,未来会探索vite等新技术。
|
- 📡 __面向未来__ ,在满足需求的同时,我们也不会停止对新技术的探索。已使用Vue3.0来提升应用性能,已使用webpack5 和 vite提升构建性能和实现微服务。
|
||||||
|
|
||||||
## 插件
|
## 插件
|
||||||
|
|
||||||
|
@ -6,9 +6,10 @@ import {
|
|||||||
computed,
|
computed,
|
||||||
onBeforeUnmount,
|
onBeforeUnmount,
|
||||||
onMounted,
|
onMounted,
|
||||||
|
shallowRef,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
import { loadMicroApp } from "{{{QIANKUN}}}";
|
import { loadMicroApp } from "{{{QIANKUN}}}";
|
||||||
import { mergeWith } from "{{{LODASH_ES}}}";
|
import { mergeWith, cloneDeep, isEqual } from "{{{LODASH_ES}}}";
|
||||||
// eslint-disable-next-line import/extensions
|
// eslint-disable-next-line import/extensions
|
||||||
import { getMasterOptions } from "./masterOptions";
|
import { getMasterOptions } from "./masterOptions";
|
||||||
|
|
||||||
@ -66,12 +67,27 @@ export const MicroApp = defineComponent({
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const propsConfigRef = computed(() => {
|
const propsConfigRef = shallowRef({});
|
||||||
return {
|
|
||||||
...propsFromConfigRef.value,
|
watch(
|
||||||
...props.props,
|
[() => props.props, () => attrs, propsFromConfigRef],
|
||||||
};
|
() => {
|
||||||
});
|
// 使用深拷贝去掉主应用数据和子应用数据的引用关系,避免出现副作用。
|
||||||
|
const newProps = cloneDeep({
|
||||||
|
...propsFromConfigRef.value,
|
||||||
|
...props.props,
|
||||||
|
...attrs
|
||||||
|
});
|
||||||
|
// 避免第一次无意义update
|
||||||
|
if(!isEqual(newProps, propsConfigRef.value)) {
|
||||||
|
propsConfigRef.value = newProps
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
deep: true,
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// 只有当name变化时才重新加载新的子应用
|
// 只有当name变化时才重新加载新的子应用
|
||||||
const loadApp = () => {
|
const loadApp = () => {
|
||||||
@ -84,7 +100,7 @@ export const MicroApp = defineComponent({
|
|||||||
name: `${name}_${props.cacheName || ''}`,
|
name: `${name}_${props.cacheName || ''}`,
|
||||||
entry: entry,
|
entry: entry,
|
||||||
container: containerRef.value,
|
container: containerRef.value,
|
||||||
props: {...propsConfigRef.value, ...attrs}
|
props: propsConfigRef.value
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
...globalSettings,
|
...globalSettings,
|
||||||
@ -138,7 +154,7 @@ export const MicroApp = defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 返回 microApp.update 形成链式调用
|
// 返回 microApp.update 形成链式调用
|
||||||
return microApp.update({...propsConfigRef.value, ...attrs});
|
return microApp.update(propsConfigRef.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
|
import { cloneDeep } from 'lodash-es'
|
||||||
let initState = reactive({});
|
let initState = reactive({});
|
||||||
const setModelState = (props) => {
|
const setModelState = (props) => {
|
||||||
Object.assign(initState, props)
|
// 使用深拷贝去掉主应用数据和子应用数据的引用关系,避免出现副作用。
|
||||||
|
Object.assign(initState, cloneDeep(props))
|
||||||
};
|
};
|
||||||
|
|
||||||
export default () => initState;
|
export default () => initState;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user