Vue页面刷新路由传参与vuex数据丢失
Vuex 刷新页面数据丢失
为什么刷新页面 Vuex 的数据会丢失
刷新页面 Vuex 的数据会丢失属于正常现象,因为 JS 的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面,以前堆栈申请的内存被释放,这就是浏览器的运行机制,那么堆栈里的数据自然就清空了。
实现方式
- Storage
- 第三方 npm 包
Storage
推荐 sessionStorage,也可以用 localStorage,但是它没有期限;所以常用的还是 sessionStorage,当浏览器关闭时会话结束。将需要的数据存入 vuex 的 store 里,也将该数据存入 sessionStorage 里。
注意:vuex 中的变量是响应式的,而 sessionStorage 不是,当你改变 vuex 中的状态,组件会检测到改变,而 sessionStorage 就不会了,页面要重新刷新才可以看到改变,所以应让 vuex 中的状态从 sessionStorage 中得到,这样组件就可以响应式的变化。
示例:
1 | const state = { |
第三方 npm 包
Vue 路由传参页面刷新参数丢失
常见场景:点击列表的详情,跳转到详情页,在该页根据传递的参数获取详情数据。
这里的路由当然是 Vue Router 了。
不修改路由配置
使用 sessionStorage 来马上缓存(通常在 created 钩子函数中)获得的路由参数,这种方法要自己把握好什么时候 set,什么时候 get,什么时候 remove。
配置路由参数
单个参数优先考虑使用
1 | { |
通过 $router.push 中 path 携带参数的方式
1 | // 列表中的传参 |
通过 $router.push 的 params 传参
1 | // 列表页传参 |
使用 query
适用多个参数
1 | // 路由配置 |
注意:在所有的子组件中获取路由参数是 $route 不是 $router
params 与 query 区别
当使用 params 方法传参的时候,要在路由后面加参数名,成为路由的一部分,并且传参的时候,参数名要跟路由后面设置的参数名对应。使用 query 方法,就没有这种限制,直接在跳转里面用就可以,另外 query 是拼接在 url 后面的参数,没有也没关系。
使用 props 配合组件路由解耦
1 | // 路由配置 |
相关链接
[1] 编程式导航