Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue.js 中的常见错误

Vue.js 中的常见错误

作者头像
chuckQu
发布于 2024-04-17 10:25:28
发布于 2024-04-17 10:25:28
28200
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

Vue.js,这个JavaScript框架在开发者圈子里可谓是大名鼎鼎,以其简洁和灵活著称,让开发者们能够高效地构建出既有趣又动态的网页应用。不过,就像任何技术一样,它也有自己的学习曲线和可能的陷阱。

在这篇博客文章中,我们会聊聊开发者在使用Vue.js时常见的几个错误,并给出一些实用的建议来避免它们。

错误1:忽视Vue的响应式系统

问题:Vue.js的核心特性之一就是它的响应式系统,能在状态变化时自动更新视图。我经常看到一些初级开发者犯的一个错误是,依赖非响应式数据,并期望这些数据的变化能触发更新。比如,下面这段代码是我在实际项目中见过的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const cookiesAccepted = computed(() => {
  return localStorage.getItem("cookieConsent")
})

问题在于,我们依赖了一个非响应式的数据源来提供计算属性的值。

解决方案:确保你总是依赖于用reactive或ref定义的响应式数据,当你期望变化触发组件更新时。如果在使用像localStorage这样的原生浏览器API,可以使用一个可复用的包装器,比如VueUse里的useLocalStorage,它在API外面加上了一层响应式。

错误2:不正确使用计算属性

问题:计算属性是Vue.js中一个非常强大的特性,可以创建基于其他数据属性变化的动态值。一个常见的错误是,开发者在依赖其他响应式数据的值时,使用方法而不是计算属性,这可能会导致不必要的计算和性能问题。

解决方案:如果一个值需要根据响应式数据的变化重新计算,就用计算属性。这样可以确保计算是缓存的,并且只在依赖项变化时重新评估,从而提高应用性能。

错误3:在同一元素上同时使用v-if和v-for

问题:当v-if和v-for存在于同一个节点上时,v-if的优先级更高。这意味着v-if条件将无法访问v-for作用域内的变量。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<li v-for="todo in todos" v-if="!todo.isComplete">
  {{ todo.name }}
</li>

这里会报错,因为“todo”这个属性在v-for的作用域内没有定义。

解决方案:尽可能在嵌套元素上使用v-if,或者在使用v-for循环之前,通过计算属性来过滤数据。这样做不仅提高了代码的可读性,还能确保v-if能够访问到每个单独的项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template v-for="todo in todos">
  <li v-if="!todo.isComplete">
    {{ todo.name }}
  </li>
</template>

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template v-for="todo in completedTodosComputedProp">
  <li>{{ todo.name }}</li>
</template>

错误4:未充分利用Vue的组件系统

问题:Vue的组件系统旨在帮助开发者组织和重用代码。一个常见的错误是没有将应用程序分解成更小、可重用的组件,导致代码重复和难以维护的代码库。

解决方案:识别出可以独立或重用的应用部分,并将它们转换成组件。这样做不仅使你的代码库更易于管理和维护,而且还能更有效地利用Vue的响应式和生命周期钩子。你也可以将不会渲染任何内容的有状态功能分解成可复用的composables。

错误5:忘记清理组件的副作用

问题:在使用自定义事件、定时器、服务器事件监听器或第三方库时,开发者有时会忘记清理这些持续的副作用,导致内存泄漏和性能问题,特别是在单页应用程序(SPAs)中。比如下面这个负责显示当前时间的组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- Now.vue -->
<script setup>
import { ref } from 'vue';
const now = ref(new Date().toLocaleString());
setInterval(() => {
  now.value = new Date().toLocaleString();
}, 1000);
</script>
<template>
  {{ now }}
</template>

如果这个组件从页面上移除,定时器仍然会持续运行,尽管它已经不再被使用。

解决方案:总是在unmounted生命周期钩子中移除事件监听器和停止定时器或超时。这样可以确保组件自己清理干净,不会留下不必要的操作在后台运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
onUnmounted(() => clearInterval(interval));

另外,你可以使用像VueUse这样的有用库,它可以根据常见需求自动清理这些副作用。

总结

Vue.js为构建Web应用程序提供了一个强大的平台,但避免常见的陷阱是发挥其全部潜力的关键。通过理解和解决这些常见错误,开发者可以编写更高效、更易于维护和性能更优的Vue应用程序。记住,从错误中学习是软件开发旅程的一部分。

本文译自:https://vueschool.io/articles/vuejs-tutorials/common-mistakes-in-vue-js/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue.js-列表渲染 原
我们用v-for指令根据一组数组的选项列表进行渲染,v-for指令需要以item in items形式的特殊语法,items是源数据数组并且item是数组元素迭代的别名 基本用法
tianyawhl
2019/04/04
3K0
典型 MVVM 前端框架 Vue
绑定 DOM 文本到数据,也可以绑定 DOM 结构到数据 没有触碰 DOM,DOM 操作都由 Vue 来处理,你编写的代码不需要关注底层逻辑。
江米小枣
2020/06/15
5K0
Web前端-Vue.js必备框架(三)
vue是一款渐进式javascript框架,由evan you开发。vue成为前端开发的必备之一。
达达前端
2019/07/03
1.7K0
Web前端-Vue.js必备框架(三)
Vue.js常见的性能优化手段
你好,我是喵喵侠。在 Vue.js 项目中,性能优化是确保应用程序快速响应、用户体验良好的关键。合理使用 Vue.js 的 API,不仅可以避免性能陷阱,还能大幅提升应用的效率。本文将从几个常见的 Vue.js API 出发,结合实际场景,深入探讨如何通过正确使用这些 API 来进行性能优化。
喵喵侠
2024/08/13
3400
Vue.js常见的性能优化手段
Vue.js学习笔记(一)
目前我司的后端主要是用PHP来写,发现我们后端的html+js没有采用组件的方式来做,导致代码之间重复率非常高,很难维护,举一个简单的粟子,比如现在我们有两个页面,创建和修改页面,这两个页面都有一个选择时间的控件(datePicker),由于我们没有采用组件化,我们需要分别在两个页面的html+js+css里分别写两遍同样的代码
kunge
2019/12/22
1.1K0
1.1、文本插值
Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。
张果
2022/11/12
9K0
1.1、文本插值
Vue.js 2.0 学习重点记录
Vue.js兼容性 Vue.js.js 不支持 IE8 及其以下版本,因为 Vue.js.js 使用了 IE8 不能模拟的 ECMAScript 5 特性。 Vue.js.js 支持所有兼容 ECMAScript 5 的浏览器。 Vue.js安装 安装方式有两种: 1、直接下载用script标签引入(推荐引入开发版本,压缩版本会失去错误提示和警告) 2、使用cdn方法引入 3、npm安装    npm安装的前提需要安装了nodejs,这里推荐nvm安装nodejs 附上一小段nvm使用的命令: $ nvm
蓓蕾心晴
2018/04/12
4K0
Vue.js 2.0 学习重点记录
1.初识Vuejs
在使用 Vue 时,我们推荐在你的浏览器上安装 Vue Devtools。它允许你在一个更友好的界面中审查和调试 Vue 应用。
西柚dzh
2022/06/09
2K0
【Vue.js】002-Vue.js起步
Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统;
訾博ZiBo
2025/01/06
1360
【Vue.js】002-Vue.js起步
前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器
一、条件渲染 1.1、v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}} <h1>Yes</h1> {{/if}} 在 Vue.js ,我们使用 v-if 指令实现同样的功能: <h1 v-if="ok">Yes</h1> 也可以用 v-else 添加一个 “else” 块: <h1 v-if="ok">Yes</h1> <h1 v-else>No</h1> 1.1.1、template v-if 因为 v
张果
2018/03/30
3.3K0
前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器
vue课程大全
var app=new Vue({el:"#app",data:{msg:"hello vue!"}})
李才哥
2021/02/20
1.7K0
vue课程大全
Vue.js入门指南:从基础到进阶,掌握现代JavaScript框架的核心概念与高级特性(2W字小白教程)
在本篇博客中,我们将带您逐步了解Vue.js,从入门到进阶,全面掌握这个现代JavaScript框架的核心概念和高级特性。我们将从Vue.js的基础安装和"Hello World"开始,逐步深入到模板语法、数据绑定、组件化开发、常用指令与事件、路由管理、状态管理、Composition API等高级主题。最后,我们还将分享性能优化的技巧和Vue开发的最佳实践,以及回答一些初学者常见的问题,并为您推荐一些优质的学习资源。让我们一起开始Vue.js的学习之旅吧!
猫头虎
2024/04/08
2.8K0
Vue.js入门指南:从基础到进阶,掌握现代JavaScript框架的核心概念与高级特性(2W字小白教程)
Vue.js 性能优化与用户体验提升之道
Vue.js 是一个高效且灵活的前端框架,它通过一系列精巧的设计和优化策略,确保了应用的性能。理解这些性能优化原理,可以帮助我们更好地利用 Vue 的特性,编写出更加高效的应用。本文将探讨 Vue 性能优化原理以及最佳实践。
Front_Yue
2024/07/27
2260
Vue.js 性能优化与用户体验提升之道
Vue 2.6 全新的slot语法
2019年大年三十,Vue 2.6发布,其中改动最大的就是slot(插槽),今天为大家分析一下最新版的slot。
用户1687375
2019/05/06
4K0
Vue 2.6 全新的slot语法
懂一点前端—Vue快速入门
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架,是当下很火的一个 JavaScript MVVM 库,是以 数据驱动和组件化 的思想构建的。
我没有三颗心脏
2020/04/01
1.9K0
懂一点前端—Vue快速入门
使用 Vue 3 与 TypeScript 构建 Web 应用: Todo
引言 界面: Vue.js 3 JavaScript 超集: TypeScript 包管理器: pnpm 前端工程化/打包: Vite 路由: Vue Router 状态管理: Pinia CSS 预处理器: Less 代码格式化: Prettier 代码质量: ESLint 预览
yiyun
2023/07/17
1.2K0
使用 Vue 3 与 TypeScript 构建 Web 应用: Todo
Vue的Key属性,v-for和v-if,v-if/v-show,v-pre不渲染,v-once只渲染一次
key的特殊属性主要用在vue的虚拟dom算法,如果不适用key,vue会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法。使用Key,它会基于Key的变化重新排列元素顺序,并且会移除Key不存在的元素。
达达前端
2019/11/05
2.9K0
Vue的Key属性,v-for和v-if,v-if/v-show,v-pre不渲染,v-once只渲染一次
vue 随记(3):“新时代”的姿势
•性能上:最多比vue2 快2倍•静态标记提升•proxy取代defineProperty•tree shaking:按需编译打包代码•composition api :类似hook的编码风格•支持typescript:面向未来目前的代码 98% 以上使用 TypeScript 编写。如果你还没有学习 TypeScript,请尽快学习,否则可能看不懂源码。另外有件事情说出来可能会让你非常惊讶,Vue 3 的源代码完全没有使用 class 关键字!(只在测试代码和示例代码里用到了 class 关键字)•custom renderer api:自定义渲染
一粒小麦
2020/07/21
6890
深入探索Vue Getters和mapGetters的原理及使用详解
在Vue.js的状态管理中,Vuex是一个非常重要的工具,它帮助开发者集中管理应用的状态。Vuex的核心概念包括state、mutations、actions、getters和modules。今天,我们要深入探讨其中一个关键部分:getters,以及它的相关辅助函数mapGetters。通过详细介绍getters的原理和实现过程,希望能帮助你更好地理解和使用它们。
繁依Fanyi
2024/07/01
3260
vue核心知识点
这段代码在运行之后会在控制台抛出错误,意思就是获取不到div元素,这里就涉及vue一个很重要的概念:异步更新队列
前端小tips
2021/11/25
2K0
vue核心知识点
相关推荐
Vue.js-列表渲染 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验