【问题标题】:Vue Routing - prevent re-rendering the page?Vue Routing - 防止重新渲染页面?
【发布时间】:2020-04-24 18:02:47
【问题描述】:

我有News.vueNews-View.vue。当我路由到news/1 时,它会打开News-View.vue 页面。问题是我在News.vue 中有许多搜索过滤器(类别、日期等)和无限滚动。这意味着,当用户从News-View.vue 回来时,一切都会重新渲染和刷新,并且用户的首选项会被清除。有没有办法不重新渲染News.vue 页面?

News.Vue:

beforeMount: async function () {
  this.$axios.post('http://localhost/?action=news', this.filters).then((response) => {
    this.results = this.results.concat(response)
  })
}

附:我目前正在使用State Management 来保存加载的结果和保存的滚动位置,它可以工作,但是我想知道有没有办法不重新渲染页面,而是保存当前状态或其他东西......

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    您可以尝试使用keep-alive 标签:

    <keep-alive>
      <router-view></router-view>
    </keep-alive>
    

    https://vuejs.org/v2/guide/components-dynamic-async.html

    https://router.vuejs.org/api/

    但是,您需要稍微调整一下,因为我不确定您是否希望整个应用都采用这种行为?

    【讨论】:

    • 我绝对可以在我的整个应用程序中使用它。它实际上是一个移动应用程序,所以我认为如果是这样的话会更好。但它会影响性能吗?
    • 嗯,我认为是的,它会以积极的方式影响性能,但是对于组件,您需要小心在创建的钩子中使用从路由参数获取资源的函数.即使您更改路由,此功能也不会再次运行,因为保持活动状态。所以你需要添加一个观察者或类似的东西。
    • 实际上我担心它可能会对它产生负面影响(内存使用等)。非常感谢,我现在就去做! :-)
    • 嗬,实际上你可能是正确的内存使用效果。这将取决于您存储到组件中的数据大小,或者您的应用程序中拥有的组件数量。所有这些都是您的应用所特有的
    • 我不认为这会是一个问题,它是一个非常简单和轻量级的应用程序。谢谢你的帮助!我等不及要开始了:-))