前端基础
用来记录一下自己的前端入门阶段
html
我用的vscode写的html,这里推荐安装一款插件,可以实时看到网页效果(HTML preview)


html和CSS实在是没什么好说的,直接贴上代码
1 |
|
vue
到此一份静态网页就成功了,为了让他可交互的动起来,我们需要用vue
在此之前,需要了解一些知识。
基础知识
1. Vue 3 Composition API 基础
1.1 <script setup>语法
- 这是Vue 3的编译时语法糖,简化了组件编写
- 无需显式返回数据和方法,更简洁的代码结构
- 自动将顶层变量/函数暴露给模板
1.2 ref响应式数据
1 | import { ref } from 'vue' |
注意点:
ref用于创建响应式的基本类型或对象类型数据- 访问值时需要使用
.value(在模板中自动解包,无需.value) - 修改值时必须通过
.value修改
2. 数据定义与响应式原理
2.1 数据初始化
1 | const value = ref('') // 输入框的当前值 |
关键理解:
list是一个响应式数组,数组变化会自动更新视图- 每个待办项是对象,包含内容值和完成状态(名称可以自定义,比如value这些可以随意更改名字)
3. 方法实现逻辑
3.1 添加待办事项 (add函数)
1 | function add() { |
(这里要实现的功能是,把输入框的当前值放入数组,所以用到list.value.push(){},然后用完输入框中的值要清空)
实现原理:
- 从
value.value获取输入框的当前值 - 向
list.value数组添加新对象 - 清空输入框,准备下一次输入
3.2 删除待办事项 (del函数)
1 | function del(index) { |
(删除不能随意删除,每次只能删除一个,所以需要传入下标,每次删除对应下标的)
实现原理:
- 通过
splice(index, 1)从数组中删除指定位置的元素 - 视图会自动更新,删除对应的DOM元素
4. 模板语法详解
4.1 列表渲染 (v-for)
1 | <div v-for="(item, index) in list" :key="index"> |
重要概念:
v-for用于循环渲染数组或对象:key是必须的,帮助Vue识别每个节点的身份,提高渲染性能- 这里使用
index作为key(简单场景可用,但数据顺序变化时可能有性能问题)
4.2 动态类名绑定 (:class)
1 | <div :class="[item.isCompleted ? 'completed' : 'item']"> |
语法解析:
- 数组语法:根据条件返回不同的类名
- 当
item.isCompleted为true时应用completed类 - 为false时应用
item类
4.3 双向数据绑定 (v-model)
1 | <input v-model="value" type="text"> |
工作原理:
- 输入框:
v-model="value"绑定到响应式数据 - 复选框:
v-model="item.isCompleted"绑定到对象的完成状态 - 数据变化 → 视图更新,用户输入 → 数据更新
4.4 事件处理 (@click)
1 | <div @click="add" class="todo-button">Add Todo</div> |
事件传递:
- 点击”Add Todo”时调用
add函数 - 点击”del”时调用
del(index)并传入当前项的索引
5. 样式处理技巧
5.1 scoped样式作用域
1 | <style scoped> |
作用:
- 防止样式污染全局
- 自动为选择器添加唯一属性标识
5.2 条件样式类
1 | .completed { |
视觉效果:
- 已完成事项有删除线且半透明
- 通过动态类名绑定实现状态切换
6. 响应式系统工作原理
6.1 数据变化检测
- Vue使用Proxy代理监听数据变化
- 当
list.value或其中对象属性变化时,触发重新渲染
6.2 虚拟DOM更新
- 数据变化时,Vue生成新的虚拟DOM
- 与旧虚拟DOM对比差异(diff算法)
- 只更新实际变化的DOM元素,提高性能
7. 核心概念总结
| 概念 | 作用 | 示例 |
|---|---|---|
ref() |
创建响应式数据 | const value = ref('') |
v-model |
双向数据绑定 | <input v-model="value"> |
v-for |
列表渲染 | <div v-for="item in list"> |
:class |
动态类名 | :class="{completed: item.isCompleted}" |
@click |
事件绑定 | @click="add" |
methods |
定义方法 | function add() { ... } |
这份笔记应该能帮助你理解Vue的核心概念。Vue的设计理念就是”数据驱动视图”,你只需要关注数据的变化,Vue会自动处理视图的更新。
功能需求分解
1. 显示待办列表功能
数据结构设计
1 | const list = ref([ |
实现方式
1 | <div v-for="(item, index) in list" :key="index"> |
原理:v-for循环遍历数组,为每个事项创建对应的DOM元素
2. 添加新事项功能
实现代码
1 | const value = ref('') // 输入框绑定值 |
执行流程:
- 用户在输入框打字 →
v-model同步到value变量 - 点击按钮 → 触发
add函数 - 向
list数组添加新对象 - 清空输入框,准备下一次输入
3. 标记完成状态功能
样式定义
1 | .completed { |
实现方式
1 | <div :class="[item.isCompleted ? 'completed' : 'item']"> |
工作原理:
v-model="item.isCompleted":复选框与完成状态双向绑定:class动态类名:根据isCompleted值切换样式类- 用户点击复选框 →
isCompleted值变化 → 类名自动更新 → 样式生效
4. 删除事项功能
实现代码
1 | function del(index) { |
删除逻辑:
v-for循环时获取每个事项的index(位置索引)- 点击del按钮 → 传入当前项的
index splice(index, 1)从数组中删除该位置元素- Vue自动重新渲染列表
完整代码
1 | <script setup> |