MVC / MVVM 和 Vue3、React18 到底啥关系?
我用最直白、最贴合你日常写代码的方式讲清楚,保证你瞬间通透。
一、先给结论(最重要)
- Vue3 = 标准的 MVVM 框架(官方自己定义的)
- React18 = 借鉴 MVVM 思想,但不是严格的 MVVM(官方叫数据驱动)
- 两者都彻底抛弃了 MVC(前端现在没人用 MVC 写项目)
二、Vue3 为什么是 MVVM?(完全对应)
Vue3 里的三个角色 = MVVM 的三个部分
1. View(视图)
就是你写的 <template>
vue
<template>
<div>{{ name }}</div>
<button @click="changeName">改名字</button>
</template>
- 只负责显示
- 不写业务逻辑
- 不操作数据
2. Model(数据层)
就是你从 接口请求的数据、本地数据
js
const name = ref("张三");
- 负责存数据
- 负责接口请求
3. ViewModel(核心:双向绑定)
就是 Vue3 帮你做的 自动同步机制
- View 变 → Model 自动变
- Model 变 → View 自动变
你完全不用手动操作 DOM!
js
// 你只需要改数据
const changeName = () => {
name.value = "李四";
// 页面自动更新!不用 document.getElementById
};
Vue3 = MVVM 的完美体现
- 双向绑定:v-model 就是 MVVM 标志性功能
- 数据驱动视图:改数据 = 改页面
- View 和 Model 完全不直接接触
三、React18 是什么?(不是纯 MVVM,但思想一样)
React 官方定义:单向数据流的数据驱动框架
它没有双向绑定 ,但核心思想和 MVVM 完全一致。
React18 对应 MVVM
1. View(视图)
就是你写的 JSX
jsx
<div>{name}</div>
<button onClick={changeName}>改名字</button>
2. Model(数据层)
就是 State + 接口数据
js
const [name, setName] = useState("张三");
3. ViewModel(React 的"自动更新")
就是 State 驱动渲染
- 改 State → 页面自动刷新
- 但 View 变了,不会自动改 State(这是和 Vue 最大区别)
js
const changeName = () => {
setName("李四");
// 页面自动更新!
};
一句话总结 React:
单向数据流版 MVVM,思想一样,只是没有双向绑定。
四、Vue3 和 React18 共同抛弃了什么?
抛弃了:MVC、原生 DOM 操作、jQuery 时代写法
旧写法(MVC/jQuery 风格,已淘汰)
js
// 手动操作 DOM → MVC 风格
document.getElementById("btn").click(function(){
document.getElementById("name").innerText = "李四";
});
Vue3 / React18 写法(MVVM 风格)
js
// 只改数据,页面自动变 → MVVM 风格
name.value = "李四";
setName("李四");
五、一张表看懂 Vue3 / React18 与 MVVM 的关系
| 概念 | MVVM 核心 | Vue3 是否支持 | React18 是否支持 |
|---|---|---|---|
| 视图View | template/JSX | ✅ 完全支持 | ✅ 完全支持 |
| 数据Model | 数据/接口 | ✅ 完全支持 | ✅ 完全支持 |
| 自动同步 | View ↔ Model | ✅ 双向绑定 | ✅ 单向驱动 |
| 不用DOM | 不操作原生节点 | ✅ 完全不用 | ✅ 完全不用 |
| 定位 | 架构模式 | 标准 MVVM | 类 MVVM(数据驱动) |
六、最通俗的最终总结(背会就够)
-
Vue3 = 标准 MVVM
- 有双向绑定(v-model)
- 数据变页面变,页面变数据也变
-
React18 = MVVM 思想(单向数据流)
- 没有双向绑定
- 数据变页面变,但页面变要手动同步
-
共同点(最重要)
- 都是数据驱动视图
- 都不用手动操作 DOM
- 都彻底远离 MVC
- 都是为了代码分离、好维护
最终一句话
你写 Vue3、React18 的每一天,都在写 MVVM,只是你没意识到而已!