MVC / MVVM 和 Vue3、React18 到底啥关系?

MVC / MVVM 和 Vue3、React18 到底啥关系?

我用最直白、最贴合你日常写代码的方式讲清楚,保证你瞬间通透。


一、先给结论(最重要)

  1. Vue3 = 标准的 MVVM 框架(官方自己定义的)
  2. React18 = 借鉴 MVVM 思想,但不是严格的 MVVM(官方叫数据驱动)
  3. 两者都彻底抛弃了 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(数据驱动)

六、最通俗的最终总结(背会就够)

  1. Vue3 = 标准 MVVM

    • 双向绑定(v-model)
    • 数据变页面变,页面变数据也变
  2. React18 = MVVM 思想(单向数据流)

    • 没有双向绑定
    • 数据变页面变,但页面变要手动同步
  3. 共同点(最重要)

    • 都是数据驱动视图
    • 不用手动操作 DOM
    • 彻底远离 MVC
    • 都是为了代码分离、好维护

最终一句话

你写 Vue3、React18 的每一天,都在写 MVVM,只是你没意识到而已!

相关推荐
月落星还在2 天前
Spring MVC 与 Spring Boot:从“手动挡”到“自动驾驶”的进化论,兼谈前后端分离的哲学
spring boot·spring·云原生·mvc
wang09077 天前
自己动手写一个spring之MVC_3
java·spring·mvc
shepherd1267 天前
一次把 Spring MVC 文件上传参数“查没了”的排查:multipart、Filter 与 request body 的连环坑
java·后端·spring·mvc
阿pin7 天前
Android随笔-MVC/MVP/MVVM/MVI
android·mvc·mvvm·mvp·mvi
李燚8 天前
Go 项目怎么组织:DDD 4 层 vs MVC vs 脚本式
开发语言·golang·mvc·ddd·agent框架·eino
帅气的冬天10 天前
在ASP.NET MVC中对表进行通用的增删改
后端·asp.net·mvc
正儿八经的少年10 天前
Spring MVC 框架
java·spring·mvc
Evand J13 天前
【MATLAB例程】一维非线性状态滤波对比:经典EKF、MCC-EKF、MVC-EKF。在含异常测量的场景下,对比三种滤波方法的估计曲线和误差统计。
matlab·mvc·ekf·滤波·mcc
任性的芝麻13 天前
ASP.NET MVC 中的异步方式
后端·asp.net·mvc
任性的自行车13 天前
ASP.NET MVC 4路线图
后端·asp.net·mvc