如何设置QianKun架构中,当子应用传递参数到主应用时,保证`onGlobalStateChange`监听器仅触发一次?
时间: 2024-12-07 20:19:20 浏览: 12
在QianKun微前端架构中,确保`onGlobalStateChange`监听器在子应用向主应用传递参数时只触发一次,通常需要在初次状态变化后将其设置为不可再监听。你可以按照以下步骤操作:
1. **初始化阶段**:
- 当子应用第一次通过`globalState`或`service`暴露数据时,在`onGlobalStateChange`回调中添加一个标识变量,比如`hasSentData = true`。
```javascript
// 子应用代码示例
state/globalState.js
const initialState = {
// 其他状态...
hasSentData: false,
};
const globalState = useStore sagas({
onInit() {
emit('globalStateChange', { ...initialState });
},
// 其他事件处理...
});
```
2. **监听器更新**:
- 在`onGlobalStateChange`监听器内检查`hasSentData`是否已设为`true`。如果已经发送过数据,则跳过响应。
```javascript
// 主应用代码示例
mainApp/app.js
useEffect(() => {
const handleGlobalStateChange = (newGlobalState) => {
if (!newGlobalState.hasSentData) {
// 更新全局状态并保存新的值
setGlobalState(newGlobalState);
newGlobalState.hasSentData = true; // 标记数据已发送
}
};
// 添加监听器
addEventListener('globalStateChange', handleGlobalStateChange);
return () => {
removeEventListener('globalStateChange', handleGlobalStateChange); // 移除监听器在组件卸载时
};
}, []);
```
阅读全文