【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 的响应式系统相协调,确保数据变化后视图能够正确更新。

总结

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

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

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

相关推荐
艾小码1 分钟前
为什么你的JavaScript代码总是出bug?这5个隐藏陷阱太坑了!
前端·javascript
辻戋2 小时前
从零实现React Scheduler调度器
前端·react.js·前端框架
徐同保2 小时前
使用yarn@4.6.0装包,项目是react+vite搭建的,项目无法启动,报错:
前端·react.js·前端框架
Qrun3 小时前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp3 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.4 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl6 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫7 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友7 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理9 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design