
vuex-router-sync API全清单sync、unsync与moduleName配置3分钟讲透【免费下载链接】vuex-router-syncEffortlessly keep vue-router and vuex store in sync.项目地址: https://gitcode.com/gh_mirrors/vu/vuex-router-syncvuex-router-sync 是 Vue 2 生态中一个轻量好用的状态同步库它把 vue-router 的当前路由状态实时同步进 Vuex store让任意组件都能直接读取当前路径、参数与查询串。本文 3 分钟带你看完它的完整 API 清单sync 如何建立同步、unsync 如何安全销毁、moduleName 如何自定义模块名并附上新手最常踩的坑。 它解决什么问题在 Vue 2 项目里两个管家各管一摊角色存放内容局限vue-router当前路由信息$route只能在组件里通过$route拿Vuex全局共享状态默认不知道现在在哪个页面导航栏高亮、行为埋点、全局守卫等场景都需要在 store 里读到当前路由。vuex-router-sync 就是干这件事的它向 store 注入一个路由模块让路由变化与 store 状态始终保持一致。⚠️ 核心原则URL 才是数据的唯一来源source of truthstore.state.route是只读的派生状态不要试图修改它来触发跳转。 30 秒上手sync 函数npm install vuex-router-sync然后一行代码完成接入返回值就是销毁函数 unsyncimport { sync } from vuex-router-sync import store from ./store import router from ./router const unsync sync(store, router) // 完成 // Vue 应用销毁时调用 unsync()完整实现在 src/index.ts核心逻辑只有一百行左右非常适合通读。 API 全清单速查表vuex-router-sync 对外只有1 个函数 1 个配置项其余都是它替你生成的状态API / 字段类型默认值说明sync(store, router, options?)函数-建立同步返回unsync函数unsync()函数-销毁同步移除钩子、取消监听、卸载模块options.moduleNamestringroute自定义 Vuex 模块名store.state.route.pathstring-当前路径store.state.route.fullPathstring-完整路径含 query 与 hashstore.state.route.paramsobject-路径参数store.state.route.queryobject-查询字符串store.state.route.hashstring-锚点store.state.route.name/metastring / any-路由名称 / 元信息store.state.route.fromobject-来源路由上一页状态字段的完整 TypeScript 定义见 src/index.ts。️ moduleName 配置自定义模块名默认情况下同步的路由状态挂在store.state.route下。如果项目里已有同名模块或想换个更语义化的名字可通过第三个参数配置sync(store, router, { moduleName: RouteModule })配置后状态位置变为store.state.RouteModule.path。官方测试用例覆盖了这一用法见 test/index.spec.ts。两个细节值得知道模块是带命名空间namespaced注册的不会污染全局 statemutation 名为ROUTE_CHANGED完整路径即moduleName /ROUTE_CHANGED见 src/index.ts。♻️ unsync很多人忽略的销毁函数sync返回的unsync用于彻底解除同步典型场景你的 Vue 应用只是大站的一个模块微前端、嵌入页面需要销毁并释放资源单元测试中复用同一个 store / router 实例热更新、多实例场景避免残留监听器。调用unsync()会依次做三件事实现见 src/index.ts移除 router 的 afterEach 钩子—— 不再监听路由跳转取消 store.watch 监听—— 不再跟随 store 变化跳转卸载 Vuex 模块—— 从 store 中删除整个路由模块。官方测试验证了这三步全部执行到位可参考 test/index.spec.ts。⚙️ 工作原理双向同步 时间旅行vuex-router-sync 内部是双向的方向机制典型场景路由 → storerouter.afterEach钩子提交ROUTE_CHANGED用户点击链接、$router.pushstore → 路由store.watch监听后调用router.push时间旅行在 Vuex DevTools 回放旧状态第二个方向非常实用——你可以在 Vuex DevTools 里把路由状态回滚到几秒前页面会真正跳转回去调试体验极佳。源码用一个isTimeTraveling标志位防止两个方向互相触发造成死循环见 src/index.ts设计上很巧妙。️ 新手常见坑不要改 store 里的路由来跳转store.state.route是被Object.freeze冻结的只读状态见 src/index.ts改它既无效果也违背URL 是唯一来源的设计。跳转请一律用$router.push()/$router.go()。版本要求该库面向 Vue 2 生态peerDependencies要求vue-router ^3.0.0与vuex ^3.0.0见 package.json。卸载别忘 unsync长驻应用或测试环境里不调用unsync()会残留监听器与模块。✅ 小结vuex-router-sync 的全部 API 就三点sync(store, router)—— 一行接入返回销毁函数options.moduleName—— 自定义模块名避免命名冲突unsync()—— 应用销毁时干净释放不留监听。配合 store 中自动生成的路由模块状态基本覆盖路由与全局状态同步的全部需求。更多细节可阅读 README.zh-cn.md、版本记录 CHANGELOG.md或直接通读核心源码 src/index.ts。【免费下载链接】vuex-router-syncEffortlessly keep vue-router and vuex store in sync.项目地址: https://gitcode.com/gh_mirrors/vu/vuex-router-sync创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考