vue-router 居然在小版本号中引入破坏性更改

2022-11-04 12:31:50 +08:00
 lllyglh
大部分使用 vue 的 应该避免不了使用 vue-router

官方教程中提到 可以使用 router.push({ name: 'user', params: { username } }) 的方式传参,

但是现在这个 params 居然在小版本号中移除了,甚至没更新教程,这对于初学 vue-router 的新手的积极性是一个很大的打击。

官方教程链接: https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location

Github 讨论链接(已被关闭):https://github.com/vuejs/router/issues/1527
5178 次点击
所在节点    程序员
43 条回复
shintendo
2022-11-04 14:16:59 +08:00
OP 搞个大新闻,哪有移除 params ,只能说改了一个未定义行为,只不过这个未定义行为被广泛使用了
hcwhan
2022-11-04 14:18:56 +08:00
@shintendo 我也是的 看内容吓了一跳 移除 params 那路由匹配咋弄 一脸问号
hcwhan
2022-11-04 14:20:26 +08:00
@shintendo 这个有被广泛使用吗 路由跳转的时候 通过手动指定非路由 params 传数据 看着就好不规范呀 从没见过这样写的
shintendo
2022-11-04 14:21:08 +08:00
@zhzy0077 问题来了,修改 undocumented api 算不算破坏性更新
Mithril
2022-11-04 14:21:50 +08:00
如果是安全性漏洞,在小版本里引入 breaking change 也是没办法的事。毕竟安全优先。
但你在一个 patch 版本里,为了解决文档不一致问题,引入 breaking change 。
只能说娱乐圈开心就好。
zhzy0077
2022-11-04 14:22:20 +08:00
@hcwhan semver 的场景里,任何之前能运行的代码在改动后不能运行都是破坏性更改。Java/C++ 那么多未定义的行为,没有一个小版本更新会改动这些结果的,甚至在 C 臭名昭著的 (i++)+(i++) 类型表达式,gcc 在 patch 更新的时候也是不会改变行为的。
zhzy0077
2022-11-04 14:24:03 +08:00
@shintendo 当然 一个 API 你只要暴露出来了 就不能以文档里没写就不维护吧?最好的选择就是谨慎的选择暴露的 API 范围
hcwhan
2022-11-04 14:26:52 +08:00
@zhzy0077 你这样理解肯定不对 就算是 semver 改动 是修复 bug 的 那假如我之前写的一个功能依赖于某个 bug 你现在把 bug 修复了 那我的功能就会出问题 我记得之前看到过有一个 lua 代码就是 依赖的 lua 解释器排序算法某种场景下的 bug 那个排序算法 bug 修复后 lua 功能出错了
zhzy0077
2022-11-04 14:29:23 +08:00
@hcwhan 这样的 bug 当然可以修复 但是至少要放到 minor 里
hcwhan
2022-11-04 14:33:40 +08:00
@zhzy0077 赞同 改 minor 好一些
shakukansp
2022-11-04 14:35:57 +08:00
vue2 的时候我记得这么写传不过去的
nomagick
2022-11-04 14:39:04 +08:00
表面看是版本政策问题,本质上是 API 设计问题
sechi
2022-11-04 14:48:06 +08:00
真就是标题党啊,只看你这个描述我还以为是 push 方法不能传 param 了
hronro
2022-11-04 15:20:20 +08:00
为啥 Vue 的 issue 里面这么多人用中文啊
wangtian2020
2022-11-04 15:25:54 +08:00
破坏性更改
指我的 build 被破坏的变化
我的 build 不被破坏的不算
MEIerer
2022-11-04 15:28:14 +08:00
@hronro #34 用中文你看不懂吗
ccyu220
2022-11-04 15:55:28 +08:00
总想搞个大新闻,我还以为是移除了 params 只能使用 query 的方式。

没想到你们一直以来的用法是不声明路由参数就使用 params 传递?那可能就是人的问题了

这是用上框架就把 JS 基础给忘了
ccyu220
2022-11-04 15:57:56 +08:00
甚至我认为 params 就应该只在传递单个 id 或关键值时使用 ,其它的一概用 query 的方式,更语义化
marcong95
2022-11-04 16:23:18 +08:00
这个 issue 还挺唬人的,而且没有附 router 的定义。盯着 issue 看了一圈,以为是真的把 params 去掉了。谁知道原来是一堆人在强行往 params 里面塞东西,把 params 当 query 用,还不想 URL 里出现这些内容。

考虑到那个 issue 那么多人用中文,有没有一种可能是那些人没看(没看懂)作者发的 changelog

Move the data to an actual param by defining it on the route's path or pass it as query params: this is relevant if you have small pieces of data that can fit in the URL and should be preserved when reloading the page
yuningWang8
2022-11-04 16:45:00 +08:00
确实是个反模式。原来见有人这么用过。印象里文档老早就说过,params 只是用于构建 URL ,不知道为什么会有人用于传参。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/892613

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX