Tencent / wujie

极致的微前端框架
https://wujie-micro.github.io/doc/
Other
4.18k stars 598 forks source link

期望在sync模式下,支持交给外部决定路由如何同步 #511

Open Lienviws opened 1 year ago

Lienviws commented 1 year ago

现象

我的主应用 router 是通过 hash 变更来改变的,比如:

www.xxx.com/v3/#/space/dataset www.xxx.com/v3/#/space/datasource

但是无界里面路由同步改的是query部分,同步后会导致整个 href 乱掉,比如

www.xxx.com/v3/#/space/dataset -> www.xxx.com/v3/?datamarket=%2Fhome%2Fmarket-list#/space/dataset

解决方案

我发现并没有相关钩子,因此目前自己的解决方案,是把 wujie 代码拉下来,手动改 sync.ts 文件

// ...
if (winUrlElement.href !== window.location.href) {
    if (typeof sync === 'function') {
      sync(winUrlElement.href, queryMap[id]); // 外部控制
    } else {
      window.history.replaceState(null, '', winUrlElement.href);
    }
  }
// ...

把参数拼在hash后的query部分,

<WujieReact sync={(targetUrl, encodeQuery) => {
    const search = `?params=${encodeQuery}`;
    const target = `${history.location.pathname}${search}`;
    if (history.location.search !== search) {
      window.history.replaceState(
        null,
        '',
        `${location.origin + location.pathname}#${target}`
      );
    }
  }} />

达到这样的路由效果:

www.xxx.com/v3/#/space/dataset?params=%2Fhome%2Fmarket-list

然后在 load wujie 的时候,手动管理 params 部分。

期望

期望wujie官方可以支持类似的能力。 感谢。

hu5871 commented 9 months ago

你试试提个pr,混乱的url看起来真的头疼

wells1013 commented 7 months ago

这个有解决方案吗? 怎么解决的?

Naeemo commented 7 months ago

我前些天也提了 issue 没回应。现在我是禁用自带的 sync 自己用插件拦截添加钩子,然后由外部自定义怎么 sync

ZhangYC193 commented 7 months ago

@Naeemo 能分享吗

Lienviws commented 7 months ago

因为业务需要,我是下载源码到本地直接改的