ant-design / pro-components

🏆 Use Ant Design like a Pro!
https://pro-components.antdigital.dev
MIT License
4.04k stars 1.29k forks source link

🐛[BUG] menu中配置中,如果直接修改了defaultMenuData中的信息,会在生产环境导致404 #8355

Open uliian opened 2 weeks ago

uliian commented 2 weeks ago

🐛 bug 描述

layout配置中,配置了menu.request,在方法里,如果直接修改defaultMenuData中的数据,移除了某些路由项,会导致直接前端页面跳转404

我通过做defaultMenuData和自己系统的ACL做匹配进行权限管控,如果ACL中没有和defaultMenuData中name相同的内容则不显示菜单。我认为defaultMenuData只对菜单进行控制,于是直接将没在ACL中的项进行了移除。导致前端直接跳转某些hiddenInMenu的页面报404(因为hideInMenu项并不在我的ACL中,我的ACL只控制了显示菜单项)而诡异的是,如果对这个页面进行刷新,该页面又能正常访问。

并且该问题仅在生产环境中出现。开发调试过程中没有。通过抓包发现,正常前端跳转至这个页面不会触发远程加载页面js,即没有pxxxindex.xxxx.js请求。而通过刷新或者重进入该页面,会进行pxxxindex.xxxx.js请求,并正常加载页面。

猜测:因为更改了defaultMenuData,导致某些优化丢弃了该页面的引用,导致前端跳转404.

📷 复现步骤

layout配置中,配置menu.request,直接修改defaultMenuData,丢弃某些页面。编译发布至正式环境,点击进入这些页面的链接,页面报404,并且不会进行页面js远程加载。在该404页面进行页面刷新,能够正常浏览该页面。

🏞 期望结果

经过测试,如果对defaultMenuData进行直接更改会触发这个bug,如果对defaultMenuData进行一定程度的深度拷贝(例如每一项都{...item})则可以规避这一bug。 期望可以将defaultMenuData的入参就是已经拷贝过的入参。

💻 复现代码

export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
   //....
    menu: {
      request: async (params, defaultMenuData) => {
             //直接移除defaultMenuData中的一些item
}
  //....
}

© 版本信息