如何避免在vue spa中按下后退按钮时为刚刚导航离开的页面获取数据



我有一个vue spa应用程序。我在创建的钩子中获取页面数据

我的问题是,如果按下后退按钮,我如何避免再次为以前导航过的页面获取数据

编辑我的应用程序是在vue 3,我后来使用<点火电极比;这工作,但我无法清除缓存,即使在使用>

非常简单,通过缓存。

有几种方法可以实现某种缓存,但这主要取决于您当前的设置。

如果不使用vue-router,后退按钮导致页面重新呈现,则需要以其他方式持久化数据,例如使用localStore。如果您正在使用vuex,并且希望持久化数据,那么可以尝试vuex- persistent state。我假设,虽然你不希望持久的数据和页面没有重新加载重定向。

如果您已经在使用vuex,您可以在存储中缓存数据。

另一个选择是使用keep-alive组件

如果你不想依赖第三方工具,你也可以用缓存函数包装你的API调用。

可能是这样的。当数据被加载时,它被缓存,当缓存存在时,缓存的结果作为承诺返回,因此该方法以任何方式返回相同的类型。

let getMyDataCache = null;
export const getMyData(){
if (getMyDataCache) return new Promise((resolve)=>resolve(getMyDataCache));
return fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => {
getMyDataCache = data;
return getMyDataCache;
});
}

您可以使用vuex来存储页面的状态-然后在您的created()钩子中,检查状态是否已在获取数据之前填充。

澄清一下(因为这个答案被否决了,我不知道为什么):你需要存储你已经在某个地方获取数据的事实。您不能在组件中这样做,因为当您返回到页面时,它将被重新挂载。如果你有一个状态管理模式(例如Vuex),你可以将数据存储在那里,这样当组件重新挂载时,你可以检查你的存储,看看数据是否已经被获取,然后再试图获取它。

如果你正在使用vue-router,这个线程的答案可能会帮助你:如何使某些组件"保持活力";在Vue 3中使用路由器视图?

最新更新