v0.4.0 为 MINOR 版本,包含一处破坏性变更(params 传递机制统一)与一项新增公开 API(
RouterLink组件),另完成全库 UTS 合规加固(消除undefined残留、修复 Web 端编译类型警告)。升级请重点阅读「升级指南」。
一、破坏性变更:params 传递机制统一
变更内容
移除旧有的 __unixr_p_ 查询前缀编码机制(encodeParamsToQuery / extractParamsFromQuery 及相关常量),params 一律改由 ParamsPlugin(__params__ 关联存储) 跨页传递:
旧:/pages/detail/detail?__unixr_p_名字=张伟 ← 明文字段内联在 URL
新:/pages/detail/detail?__params__=pk_ab12cd34 ← 存储 key,正文不外泄
为什么统一
- 旧机制将 params 键名明文暴露在 URL(经
__unixr_p_前缀编码后仍可解码还原),复杂对象更无处安放; - 新机制(发起页存
ParamsManager→ 生成内部 key → 目标页状态同步时按 key 取回)与 vue-router 的params语义更贴近,且支持可选的持久化(跨刷新/重进保留,paramsPersistent: true)。
影响面
- 旧格式链接不再恢复参数:以
__unixr_p_*为参数的存量 URL 跳转后route.params为空; - 必须注册插件:携带
params的导航未注册plugins: [ParamsPlugin]将抛PLUGIN_REQUIRED(256)错误码,明确引导。
二、新增:RouterLink 组件公开导出
RouterLink(基于 useLink 的声明式导航组件,此前仅存在于包内)现从库入口直接导出:
import { RouterLink } from '@meng-xi/unix-router'
用法(to / replace / relaunch 三个属性):
<RouterLink to="pages/about/about">关于</RouterLink>
<RouterLink to="pages/detail/detail" replace>替换导航</RouterLink>
<RouterLink to="pages/index/index" relaunch>重开导航</RouterLink>
同时完成组件 CSS 合规:移除 <style scoped> 与 display: inline-block(uni-app x CSS 规则禁用项),改用 flex 布局。
三、修复与合规加固
- 消除全库
undefined残留:统一以== null/??窄化可空值,修复 Web 端(编译为 JS)暴露的Type ... | undefined编译警告,同时符合 UTS 原生端(Kotlin/Swift)「禁用undefined」的强约束; - 插件契约类型合规:
RouterPlugin/PluginContext/ParamsManager等由interface调整为type,支持对象字面量直接赋值(规避 UTS 对象字面量不能赋给 interface 的编译错误)。
四、升级指南
从 ≤0.3.x 升级
- 创建路由器时注册 ParamsPlugin(若使用
params):
import { createRouter, ParamsPlugin } from '@meng-xi/unix-router'
const router = createRouter({ routes, plugins: [ParamsPlugin] })
- 目标页读取方式不变:
useRoute().params.get('id')仍然可用(状态同步时重建)。 - 清理旧参数格式链接:任何手写/收藏的
?__unixr_p_xxx=...URL 不再恢复参数。 - 若希望 params 跨刷新保留,可加
paramsPersistent: true(须配合 ParamsPlugin)。
版本兼容性
| 功能 | ≤0.3.x | 0.4.0 |
|---|---|---|
params 传递 | __unixr_p_ 编码 / ParamsPlugin | 仅 ParamsPlugin(统一) |
| 旧格式 URL 恢复参数 | ✅ | ❌(破坏性) |
RouterLink 组件 | 内部未导出 | ✅ 公开导出 |
undefined / Web 编译警告 | 部分残留 | ✅ 清除 |
五、相关链接
欢迎反馈与共建:GitHub