当前位置: 首页 > 知识库问答 >
问题:

服务端渲染 - 如何让useAsyncData请求不显示在network?

邵博艺
2023-12-19

nuxt3中的useAsyncData渲染后要刷新数据,再发起的请求能不显示在network中吗?

<template>  <span>    <slot />    页面访问量:{{ data }}  </span>  <button @click="refresh">刷新数据</button></template><script setup>const { data, pending, refresh, error } = await useAsyncData("mountains", () =>  $fetch("http://localhost:8088/hello"));</script>

所有的请求,不管是初始化还是后续更新数据都不显示在network中,只走服务端渲染

共有1个答案

庄萧迟
2023-12-19

在 Nuxt.js 中,useAsyncData 钩子函数用于异步获取数据,并在组件被渲染时预先加载数据。由于它是异步获取的,因此在组件加载时会发出一个请求,并且该请求会在网络中显示。

要确保 useAsyncData 请求不显示在 network 中,你可以考虑以下方法:

  1. 使用服务端渲染 (SSR):服务端渲染会将组件的 HTML 发送到客户端,并且可以在服务器端预先加载数据。这样,当客户端加载页面时,不会发送任何额外的请求。在 Nuxt.js 中,你可以使用 nuxt/image 或其他 Nuxt.js 插件来优化图片加载,并使用 nuxt/fetch 插件来处理异步数据加载。
  2. 使用状态管理:如果你不想使用服务端渲染,另一个选择是使用状态管理工具(如 Vuex)来管理你的数据。你可以在 Vuex store 中定义一个 action 来获取数据,并在组件中调用该 action。这样,只有当组件需要更新数据时才会发出请求,而不是在组件加载时。

对于你的代码示例,如果你希望在点击按钮后刷新数据而不显示在 network 中,你可以考虑使用状态管理的方法。你可以在 Vuex store 中定义一个 action 来获取数据,并在组件中调用该 action。例如:

<template>  <span>    <slot />    页面访问量:{{ data }}  </span>  <button @click="refresh">刷新数据</button></template><script setup>import { useStore } from 'vuex';const store = useStore();const refreshData = () => {  store.dispatch('refreshData');};</script>

在 Vuex store 中:

import { defineStore } from 'vuex';export default defineStore({  state: {    data: null, // 初始数据状态    pending: false, // 请求是否正在进行中    error: null, // 错误信息  },  mutations: {    setData(state, data) {      state.data = data;    },    setPending(state, isPending) {      state.pending = isPending;    },    setError(state, error) {      state.error = error;    },  },  actions: {    async refreshData({ commit }) {      commit('setPending', true); // 设置请求正在进行中      try {        const response = await $fetch("http://localhost:8088/hello"); // 发起请求获取数据        commit('setData', response.data); // 将获取到的数据存储到状态中        commit('setPending', false); // 设置请求完成      } catch (error) {        commit('setError', error); // 存储错误信息到状态中        commit('setPending', false); // 设置请求完成,并显示错误信息给用户看      }    },  },});

通过以上方式,当点击按钮后触发 refreshData action,数据请求将在服务端执行,而不会显示在 network 中。

 类似资料:
  • 服务端渲染一个很常见的场景是当用户(或搜索引擎爬虫)第一次请求页面时,用它来做初始渲染。当服务器接收到请求后,它把需要的组件渲染成 HTML 字符串,然后把它返回给客户端(这里统指浏览器)。之后,客户端会接手渲染控制权。 下面我们使用 React 来做示例,对于支持服务端渲染的其它 view 框架,做法也是类似的。 服务端使用 Redux 当在服务器使用 Redux 渲染时,一定要在响应中包含应用

  • 准备动作 1、安装nodejs与安装express 安装nodejs教程:http://www.cnblogs.com/pigtail/archive/2013/01/08/2850486.html 安装 express 教程:https://www.wenjiangs.com/doc/f5jxm7ii 2、安装node-jsx(使nodejs支持jsx语法) $ npm install node

  • 实验性 SSR 支持还处于试验阶段,你可能会遇到 bug 和不受支持的用例。请考虑你可能承担的风险。 注意 SSR 特别指支持在 Node.js 中运行相同应用程序的前端框架(例如 React、Preact、Vue 和 Svelte),将其预渲染成 HTML,最后在客户端进行脱水化处理。如果你正在寻找与传统服务器端框架的集成,请查看 后端集成指南。 下面的指南还假定你在选择的框架中有使用 SSR

  • 从 3.8.0 开始,san 的服务器端渲染由 san-ssr 实现。如果你在使用 3.8.0 之前的 san,请参考 服务器端渲染(3.8.0 之前)。 San 的服务端渲染支持是基于 组件反解 的: 服务端输出的 HTML 中带有对视图无影响,能帮助组件了解数据与视图结构的标记片段 浏览器端,组件初始化时从标记片段理解组件结构,在后续用户操作时组件能正确响应,发挥作用 提示:由于组件运行环境需

  • info 如果您能了解下面这些技术,能加快您对本文的了解 vuex - Vue.js 应用程序开发的状态管理模式 Vue.js SSR - Vue.js 服务器端渲染 webpack - 编译构建工具 Lavas 服务器端渲染模板参考了 vue-hackernews 的渲染和开发机制,并且结合了 Lavas 的 App Shell 模板,导出的工程中会有 App Shell 等 如果您不了解 vu

  • Support in 2.8.0+ 介绍 什么是服务端渲染 服务端渲染(Server-Side Render),是指将单页应用(SPA)在服务器端渲染为 HTML 片段,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页面的过程。 与客户端渲染的区别 后续简称服务端渲染为 SSR,客户端渲染为 CSR 如下图所示: 对比 SPA 站点 和 SSR 站点 在 SEO 区别: SSR 优势在于: