目录
[原生 JS / jQuery 时代](#原生 JS / jQuery 时代)
[1. 数据驱动视图](#1. 数据驱动视图)
[2. 组件化开发](#2. 组件化开发)
[3. 统一的状态管理 & 数据流](#3. 统一的状态管理 & 数据流)
[4. 工程化 & 开发效率](#4. 工程化 & 开发效率)
一、一句话核心答案
为了解决原生开发中 DOM 操作繁琐、数据与视图难以同步的问题,实现数据驱动视图、组件化开发,提升开发效率和代码可维护性。
二、没有框架的时代(痛点分析)
原生 JS / jQuery 时代
html
<!-- 一个简单的计数器 -->
<div>
<span id="count">0</span>
<button id="btn">+1</button>
</div>
<script>
let count = 0
const countEl = document.getElementById('count')
const btn = document.getElementById('btn')
btn.addEventListener('click', () => {
count++ // 改数据
countEl.innerText = count // 手动改 DOM
})
</script>
四大痛点
| 痛点 | 说明 |
|---|---|
| DOM 操作繁琐 | 数据变了要手动找到 DOM 元素并更新,代码冗长 |
| 数据与视图难同步 | 多个地方用到同一个数据时,要到处写更新代码 |
| 代码难以维护 | 逻辑分散在 DOM 操作、事件绑定、数据更新中 |
| 协作成本高 | 没有统一的代码组织方式,每个人写法不同 |
javascript
// 复杂场景下的痛点示例
// 用户信息在多个地方显示,改了要到处更新
function updateUser(user) {
$('#userName').text(user.name) // 更新第1处
$('#userAvatar').src = user.avatar // 更新第2处
$('.user-badge').text(user.name) // 更新第3处
// 漏掉一处就出 bug
}
三、框架解决的核心问题
1. 数据驱动视图
原生:手动改 DOM → 框架:数据变 → 视图自动更新
javascript
// 原生写法
let count = 0
document.getElementById('count').innerText = count // 手动更新
// Vue/React 写法
const [count, setCount] = useState(0)
// 只需关心数据,视图自动更新
你只需要关心数据,不用关心 DOM 怎么更新。这就是 Vue/React 最核心的价值。
2. 组件化开发
没有框架:页面一大块 HTML,复用靠复制粘贴
有框架:页面拆成一个个组件,可复用、可组合、可独立维护
没有组件化:
┌─────────────────────────────────────────────────────────┐
│ 整个页面是一个大文件,几千行代码 │
│ 改一个地方可能影响全局 │
│ 复用只能复制粘贴 │
└─────────────────────────────────────────────────────────┘
有组件化:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 头部组件 │ │ 列表组件 │ │ 底部组件 │
└─────────┘ └─────────┘ └─────────┘
↑ ↑ ↑
独立维护 独立维护 独立维护
可复用 可复用 可复用
3. 统一的状态管理 & 数据流
| 问题 | 没有框架 | 有框架 |
|---|---|---|
| 数据存放 | 散落在各个地方 | 集中管理(Vuex/Pinia/Redux) |
| 数据修改 | 谁都能改,乱了不知道原因 | 单向数据流,修改路径清晰 |
| 调试 | 困难 | 可追踪、可预测 |
单向数据流:
数据 → 视图 → 事件 → 数据(闭环清晰)
4. 工程化 & 开发效率
| 能力 | 说明 |
|---|---|
| 脚手架 | 一键生成项目,不用手动配置 |
| 热更新 | 改代码即时看到效果,不用刷新页面 |
| 模块化 | 代码拆分、按需加载 |
| 打包优化 | 压缩、Tree-shaking、代码分割 |
| 生态完善 | 路由、状态管理、UI 库、请求库 |
四、框架带来的核心价值总结
| 价值 | 说明 |
|---|---|
| 数据驱动视图 | 数据变,视图自动变,不用手动操作 DOM |
| 组件化 | 页面拆分成独立组件,可复用、易维护 |
| 单向数据流 | 数据变化可预测、可追踪 |
| 工程化 | 脚手架、热更新、打包、生态 |
| 开发效率 | 从"写页面"变成"开发应用" |
五、面试标准答案(背这个)
问:为什么会有 React 和 Vue 这些框架?
答: 为了解决原生开发中的痛点:
DOM 操作繁琐:原生开发中数据变化需要手动操作 DOM,代码冗长且容易出错
数据与视图难同步:多个地方使用同一数据时,需要到处写更新代码
代码难以维护:逻辑分散,没有统一的组织方式
协作成本高:每个人写法不同,难以团队协作
框架带来的价值:
数据驱动视图:数据变视图自动变,开发者只需关心数据
组件化:页面拆分成独立组件,可复用、易维护
统一数据流:状态变化可预测、可追踪
工程化:脚手架、热更新、打包、完善的生态
框架让前端从"写页面"变成了"开发应用"。