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

相关推荐
Cyan_RA94 天前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
Cyan_RA96 天前
SpringMVC REST 详解
java·spring·mvc·springmvc·restful·jquery·jsp
budingxiaomoli9 天前
Spring Web MVC 知识总结
spring·mvc
虾米Life10 天前
MVC与MVVM 架构
架构·mvc·mvvm
笛卡尔的心跳12 天前
Spring MVC 注解
java·spring·mvc
小松加哲13 天前
Spring MVC 核心原理全解析
java·spring·mvc
那个失眠的夜13 天前
RESTful 语法规范 核心注解详解
java·spring·mvc·mybatis
羌俊恩14 天前
Centos环境django项目部署过程
django·flask·centos·mvc·mtv·web项目框架
Foreer黑爷16 天前
Spring MVC原理与源码:从请求到响应的全流程解析
java·spring·mvc
曹牧16 天前
Spring MVC中使用HttpServletRequest和HttpServletResponse
java·spring·mvc