【vue】关于异步函数使用不当导致的template内容完全无法渲染的问题

bash 复制代码
<script setup>
const fetchProduct = async () => {
  ......
}
await fetchProduct()
</script>

我突然template中的内容完全无法渲染

原因就是基础知识忘了(全栈工程师的通病,这一方面熟了,那一方面就生了)

解决方法是将 fetchProduct 的调用放在一个 onMounted 钩子函数中

bash 复制代码
onMounted(async () => {
  await fetchProduct()
})

将 fetchProduct 的调用放在 onMounted 钩子函数中的原因是:

异步操作和组件生命周期: fetchProduct 函数是一个异步函数,它使用 await 关键字来等待网络请求的完成。 异步操作需要时间,而 Vue 组件的渲染过程是同步的。 如果直接在 script setup 中调用 await fetchProduct(),Vue 会尝试立即渲染组件,但此时 fetchProduct 还没有完成,product、carouselItems 和 isLoading 等数据可能仍然是初始值(空对象或 undefined),导致组件渲染为空白或显示错误信息。

onMounted 的作用: onMounted 是 Vue 提供的一个生命周期钩子函数,它会在组件的 DOM 元素被挂载到页面后执行。 这意味着,当 onMounted 函数被调用时,Vue 已经完成了组件的初始渲染,并且 DOM 元素已经就绪。 将 fetchProduct 的调用放在 onMounted 中,确保了在数据加载完成后再更新组件的视图。 这样,Vue 就可以使用加载完成的数据来渲染组件,避免了渲染空白或错误信息的问题。

避免阻塞渲染: 直接在 script setup 中使用 await 会阻塞组件的渲染过程,直到 fetchProduct 完成。 这会影响用户体验,因为用户需要等待数据加载完成才能看到任何内容。 使用 onMounted 可以避免这个问题,因为 onMounted 在组件渲染完成后执行,不会阻塞渲染过程。

最佳实践: 将异步数据加载操作放在生命周期钩子函数中(如 onMounted、onBeforeMount 等)是 Vue 的最佳实践,它可以确保数据加载的时机正确,并避免潜在的渲染问题。

简而言之,onMounted 提供了一个安全的上下文来执行异步操作,确保在组件已渲染且 DOM 元素可用后才进行数据获取和更新,从而避免渲染问题并提高用户体验。 这与 Vue 的响应式系统相协调,确保数据变化后视图能够正确更新。

总结

总结一下,为什么效率如此只差呢?要是放在三年前,小小前端还不得手到擒来,主要是服兵役两年,编程啥的全忘了,编程又特别注意细节,细节忘了,就会导致一直出莫名其妙的错误。

而且,现在又搞全栈,前端好不容易熟悉了点,又去搞后端,后端好不容器熟悉了点,又去搞浏览器扩展程序,导致前面的会忘掉。

得像个办法,抓总的整体的,放细节的。还得定时复习,知道固化下来,就不那么容易忘记了。

相关推荐
木亦Sam几秒前
前端代码优化之函数节流与防抖技巧
前端
GDAL13 分钟前
Better-SQLite3 参数绑定详解
javascript·sqlite3
diang14 分钟前
DeepSeek在前端的使用场景及使用
前端·deepseek
Georgewu17 分钟前
【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(一)
前端·华为·harmonyos
双口馋猫19 分钟前
cesium+vite demo
前端·vue.js
雾岛听风来20 分钟前
Cython与CUDA之Add
前端·cython
猿榜20 分钟前
js逆向-某博博返回数据解密
javascript·python
IT、木易27 分钟前
大白话解释 JavaScript 中的this关键字,它在不同场景下是如何取值的?
开发语言·javascript·ecmascript
摆烂工程师29 分钟前
什么是MCP?一分钟搞懂!
前端·后端·程序员
A死灵圣法师38 分钟前
同一个接口,掉n次,取消上次请求
前端