路由参数持久化问题分析与解决方案

33 阅读1分钟

现在遇到一个问题,在A页面获取到了一个数据,通过this.$router.push({query:{name:name}}),传递了一个数据到B页面,我将这个name数据显示在一个输入框内,清空输入框后,刷新B页面,发现name数据又重新出现在输入框内,为什么

这是因为通过路由query传递参数,刷新页面时浏览器会重新解析URL中的参数,从而导致数据重新填充。

解决方案

  1. 使用状态管理:将数据存储在Vuex或本地存储中,而不是依赖路由参数
  2. 添加加载标志:在组件中添加一个标志,判断是否是第一次加载
data() {
  return {
    isPageLoaded: false,
    name: ''
  }
},
mounted() {
  // 只在第一次加载时从路由获取参数
  if (!this.isPageLoaded) {
    this.name = this.$route.query.name || '';
    this.isPageLoaded = true;
  }
}

3.清除URL参数:在适当时机清除URL中的参数

methods: {
  clearInput() {
    this.name = '';
    // 清除URL参数
    this.$router.replace({ query: {} });
  }
}

4 使用props接收参数:在路由配置中设置props: true,然后通过props接收参数而不是直接使用$route.query