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

相关推荐
醇氧3 天前
MVC、MVP、MVVM 架构详解、分析与对比
架构·mvc
IKUN家族3 天前
Spring MVC(五)
java·spring·mvc
风起洛阳@不良使4 天前
Spring MVC的前端控制器配置(servlet+DispatcherServlet)
前端·spring·mvc
萧瑟余晖4 天前
Java深入解析篇十六之Spring MVC与WebFlux
java·spring·mvc
IKUN家族6 天前
Spring MVC(四)
java·spring·mvc
额恩6611 天前
神经网络入门:从基础到CNN全解析
mvc
周倦岚12 天前
ArkTS中的MVC、MVP、MVVM
华为·mvc·harmonyos
IKUN家族13 天前
Spring MVC(一)
java·spring·mvc
米码收割机14 天前
【SSM】Spring MVC_MyBatis SSM商城系统(源码+论文)【独一无二】
spring·mvc·mybatis
中微极客17 天前
神经形态计算:从忆阻器到SNN训练工程实践
人工智能·mvc