react 订阅页面顺序问题
程序员文章站
2022-05-16 23:46:27
场景A页面跳转 B页面A页面跳转C页面B页面与C页面互跳进入页面订阅方法Q,离开页面要销毁方法QB 页面 的model.jssubscriptions: { setup({ dispatch, history }) { console.log("B") return history.listen(({ pathname, query }) => { if (pathname === '/product/B') { disp...
场景
A页面跳转 B页面
A页面跳转C页面
B页面与C页面互跳
进入页面订阅方法Q,离开页面要销毁方法Q
B 页面 的model.js
subscriptions: {
setup({ dispatch, history }) {
console.log("B")
return history.listen(({ pathname, query }) => {
if (pathname === '/product/B') {
dispatch({
type: 'loadPageData',
payload: query,
});
console.log('B in');
} else {
dispatch({
type: 'resetState',
});
console.log('B out');
}
});
},
},
C页面的model.js
subscriptions: {
setup({ dispatch, history }) {
console.log("C")
return history.listen(({ pathname, query }) => {
if (pathname === '/product/C') {
dispatch({
type: 'loadPageData',
payload: query,
});
// dispatch({
// type: 'userVender/save',
// payload: {leftMenuSelectedKeys:['/product/A']},
// });
console.log('===C in');
} else {
dispatch({
type: 'resetState',
});
// dispatch({
// type: 'userVender/save',
// payload: {leftMenuSelectedKeys:[]},
// });
console.log('C out');
}
});
},
},
假如从A页面跳转到B 输出
B
B in
C
C out
从A 跳转C输出
B
B out
C
C in
因为listen监听同一个路由 ,路由变化先进入哪个页面 model先订阅 ,先订阅的进入栈中,每次取的时候先执行。而不会根据页面的model执行 in out
解决方法:把要执行的方法写入页面中 useEffect 根据组件加载显示销毁
useEffect(() => {
dispatch({
type: 'userVender/save',
payload: { leftMenuSelectedKeys: ['/product/A'] },
});
//每次离开时销毁,最终写到global.js中去
return () => {
dispatch({
type: 'userVender/save',
payload: { leftMenuSelectedKeys: [] },
});
}
}, []);
本文地址:https://blog.csdn.net/JJWanna/article/details/108986806
上一篇: 刘备到底有多狠毒?让诸葛亮胆寒
推荐阅读
-
react页面内嵌微信二维码 和 自定义样式 以及 微信网页共用unionId问题
-
react-router刷新页面Cannot GET 问题
-
Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题
-
react-router实现tab页面切换,并解决选中样式首页始终选中问题
-
react-router browserHistory刷新页面404问题解决方法
-
react 订阅页面顺序问题
-
2020 React 创建MPA多页面代码框架。顺便解决 Cannot read property ‘filter’ of undefined问题
-
react解决多级页面刷新时样式失效问题
-
关于React中使用window.print()出现页面无响应问题解决记录
-
react页面内嵌微信二维码 和 自定义样式 以及 微信网页共用unionId问题