v0.4.0重磅升级:params统一机制+RouterLink公开

17 阅读2分钟

v0.4.0 为 MINOR 版本,包含一处破坏性变更(params 传递机制统一)与一项新增公开 APIRouterLink 组件),另完成全库 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 升级

  1. 创建路由器时注册 ParamsPlugin(若使用 params):
import { createRouter, ParamsPlugin } from '@meng-xi/unix-router'
const router = createRouter({ routes, plugins: [ParamsPlugin] })
  1. 目标页读取方式不变useRoute().params.get('id') 仍然可用(状态同步时重建)。
  2. 清理旧参数格式链接:任何手写/收藏的 ?__unixr_p_xxx=... URL 不再恢复参数。
  3. 若希望 params 跨刷新保留,可加 paramsPersistent: true(须配合 ParamsPlugin)。

版本兼容性

功能≤0.3.x0.4.0
params 传递__unixr_p_ 编码 / ParamsPlugin仅 ParamsPlugin(统一)
旧格式 URL 恢复参数❌(破坏性)
RouterLink 组件内部未导出✅ 公开导出
undefined / Web 编译警告部分残留✅ 清除

五、相关链接

欢迎反馈与共建:GitHub