Repraance

Results 6 comments of Repraance
trafficstars

虽然很想吐槽这宛如谭浩强的题目,不过还是要感谢 lz 的细心总结!

OK 我再验证下react-router的行为

react-router (v6)是基于navigate to,与remix 一致(remix就是基于react-router的)

vue-router 基于 navigate from,但是 react-router 基于 navigate to 的原因探究 redirect是导航的一部分。框架的导航机制包括路由,路由钩子,Link 组件等等,一般来说,框架的导航机制是整体性的。 router.push, link to等行为的原则趋向于一致。 注意到,vue的导航原则更偏向于原生html。 原生html的导航使用a标签和history.pushState。 他们的共同点是,当使用相对路径时,会以url中最后一个/ 作为base。 即,如果当前页面路径为 `/xx`,此时使用a 标签,或者pushState导航至相对路径 `yy` 时,会跳转至 `/yy`,而不是`/xx/yy`。 Vue的`RouterLink`, `router.push`, `redirect` 均遵循该原则。 与之相对的,上面一样的例子,shuvi和react-router的相对路由导航均会导航至`/xx/yy`,也就是以当前url的路由为base。 这应该是react-router最初的发明。...

补充,react-router v6 才支持了相对比较完善的relative path。 之前v5也是不支持的,其行为与vue-router 一致。 参考 https://reactrouter.com/en/main/upgrading/v5#note-on-link-to-values 值得吐槽的一点是,在解释为何这么做时,react-router 表示很多人也搞不清楚原生html的相对路径是怎么跳转的。 The decision to ignore trailing slashes while matching and creating relative paths was not taken lightly by our team. We...

最终结论: 即使redirect基于navigate to,在loader的场景中,如果开发者把逻辑抽出去,这样依旧无法得知实际的跳转地址。 因此我们认为这仍然不是一个完美的解决方案。 故此,我们决定,保持现有逻辑,并对相对路径redirect增加waring,让开发者不要使用这种方式。