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,只是你没意识到而已!

相关推荐
一叶星殇8 小时前
版本即契约:.NET 6 WebAPI 多版本治理与 Swagger 文档分治实践
mvc·.net
8Qi81 天前
DDD架构演进
java·分布式·mvc·ddd
yh弓长1 天前
Spring MVC 的请求链路
java·spring·mvc
步行cgn2 天前
Spring MVC 执行流程详解:一次请求的完整旅程
java·spring·mvc
步行cgn2 天前
Spring MVC 九大核心角色详解:请求处理链路中的每一个关键组件
java·spring·mvc
步行cgn3 天前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
CoderYanger3 天前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
步行cgn4 天前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
步行cgn4 天前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
java_nnnn5 天前
spring web mvc图书管理小案例
前端·spring·mvc