【React】04.MVC模式和MVVM模式

news2024/12/23 7:06:21

React是Web前端框架

1、目前市面上比较主流的前端框架

  • React
  • Angular(NG框架)
  • Vue

主流的思想:

不在直接去操作DOM,而是改为“数据驱动思想”

操作DOM思想:

  • 操作DOM比较消耗性能[主要原因就是,可能会导致DOM重排(回流)/重绘]
  • 操作起来也相对麻烦一些

数据驱动思想:

  • 我们不会在直接操作DOM
  • 我们去操作数据[当我们修改了数据,框架会按照相关的数据,让页面重新渲染]
  • 框架底层实现视图的渲染,也是基于操作DOM完成的。
    构建了一套虚拟DOm -> 真实DOM 的渲染体系
    有效避免了DOm的重排/重绘
  • 开发效率更高、最后的性能也相对较好

stackoverflow

操作DOM的demo

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <title>操作DOM的demo</title>
  </head>
  <body>
    <span id="textBox">0</span>
    <br />
    <button id="submit">累加</button>

    <script>
      // 想操作谁,先获取谁
      let textBox = document.querySelector("#textBox"),
        submit = document.querySelector("#submit");

      // 事件绑定
      let num = 0;
      submit.addEventListener("click", function () {
        num++;
        textBox.innerHTML = num;
      });
    </script>
  </body>
</html>

在这里插入图片描述

2、React框架采用的是MVC体系;Vue框架采用的是MVVM体系

MVC:modal数据层 + view视图层 + controller控制层

  • 按照专业的语法去构建试图(页面):React中是基于jsx语法来构建视图的
  • 构建数据层:但凡在视图中,需要“动态”处理的(获取需要变化的,不论是样式还是内容),我们都要有对应的数据模型
  • 控制层:当我们在视图中(或者根据业务需求)进行某些操作的时候,都是去修改相关的数据,然后React框架会按照最新的数据,重新渲染视图,以此让用户看到最新的效果。

单项数据驱动:数据驱动视图的渲染!!
视图中的表单内容改变,想要修改数据,需要开发者自己去写代码实现
“单向驱动”

MVVM:modal数据层 + view视图层 + viewModel数据/试图监听层

  • 数据驱动视图的渲染:修改数据,视图会跟着更新
  • 试图驱动数据的更改:监听页面中表单元素内容改变,自动去修改相关的数据
    “双向驱动”
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Javascript知识点详解:对象、New命令、Object对象的相关方法

目录 对象 对象是什么 构造函数 new 命令 基本用法 new 命令的原理 new.target Object.create() 创建实例对象 Object 对象的相关方法 Object.getPrototypeOf() Object.setPrototypeOf() Object.create() Object.prototype.isPrototypeOf() Object.prototype.__p…

微信定时发圈,让你轻松管理朋友圈!

有时候我们可能因为工作、生活等原因&#xff0c;错过了最佳的发布朋友圈时间。这时&#xff0c;就可以利用朋友圈的定时发送功能&#xff0c;提前编辑好朋友圈内容&#xff0c;设置好发布时间&#xff0c;让你的好友们在正确的时间看到你的动态。 但是怎么做到朋友圈定时发送…

学C++跟着视频学还是跟着书学?

学C跟着视频学还是跟着书学&#xff1f; 感觉得看基础和目标 如果不是喜欢 C 或者以求职 / 完成 C 相关工作为目标的话&#xff0c;菜鸟教程其实都够了&#xff0c;基本语法掌握就差不多&#xff0c;然后多去写。 最近很多小伙伴找我&#xff0c;说想要一些C的资料&#xff0…

无人机-地面站

借鉴于&#xff1a;https://www.yii666.com/blog/343453.html

网络工程实验记录

网络工程 show ip route show running-config 第一周 相同设备使用交叉线&#xff0c;不同设备之间使用直通线 R1能ping通10.1.1.1 R2能ping通所有的 R3能ping通172.16.1.1 即路由器只能到达自身线连接出去的&#xff0c;另一端就连接不了了。 此时给R1分配静态路由 R…

WebDAV之π-Disk派盘 + GeniusScan

推荐一款功能极其强大的手机微型扫描仪软件,可以将所有的东西扫描成为pdf格式的文档,还支持连接葫芦儿派盘服务。GeniusScan让您的安卓设备变身微型扫描仪。它能让您快速扫描文档,将扫描结果保存JPEG或PDF格式,然后通过电子邮件发送。支持将扫描结果上传到云服务(设备已安装…

第7章 文件读取操作

7.5 用python操作文件的3种模式 读的模式打开只能读&#xff0c;写模式打开只能写。 类似于word的只读模式 所以python打开文件得&#x1f51d;文件 文件打开模式&#xff08;文本模式&#xff09; [DEV (v.v) sa_clusterhybrid01 ~]$ cat test.py f open("name_list…

kubernetes集群编排(7)

目录 k8s认证授权 pod绑定sa 认证 授权 k8s认证授权 pod绑定sa [rootk8s2 ~]# kubectl create sa admin //在当前 Kubernetes 集群中创建一个名为 "admin" 的新服务账户[rootk8s2 secret]# vim pod3.yaml apiVersion: v1 kind: Pod metadata:name: mypod spec…

【机器学习4】降维

常见的降维方法有主成分分析、 线性判别分析、 等距映射、 局部线性嵌入、 拉普拉斯特征映射、 局部保留投影等。 1 PCA最大方差角度理解 PCA无监督学习算法。 PCA的目标&#xff0c; 即最大化投影方差&#xff0c; 也就是让数据在主轴上投影的方差最大。 在黄线所处的轴上&…

Jekyll框架编译GithubPages,提示没有docs

Jekyll Converters::Scss build issue: No such file or directory dir_chdir - /github/workspace/docs Error: No such file or directory dir_chdir - /github/workspace/docs 解决方案&#xff1a; 修改github page仓库中–> 设置—> pages 把里面的\docs&#xf…

【星海出品】flask 与docker

import os from flask import Flask, request from flask import Response, make_response, jsonify import cv2 import base64 import io import uuid from main import eye ​ app Flask(__name__)​ app.route(/, methods[GET, POST]) # 添加路由blend def upload_file():…

2023 全栈工程师 Node.Js 服务器端 web 框架 Express.js 详细教程(更新中)

Express 框架概述 Express 是一个基于 Node.js 平台的快速、开放、极简的Web开发框架。它本身仅仅提供了 web 开发的基础功能&#xff0c;但是通过中间件的方式集成了外部插件来处理HTTP请求&#xff0c;例如 body-parser 用于解析 HTTP 请求体&#xff0c;compression 用于压…

dgl安装教程

我在矩池云服务器上安装了一个dgl的环境&#xff0c;以后都可以用这个了 首先我的基础环境是 最终的版本如下 安装步骤如下 pip install dgl0.9.1 -f https://s3.us-west-2.amazonaws.com/dgl-data/wheels/cu113/repo.html注意不能直接使用 pip install dgl -f https://s…

Nginx网关配置

安装Nginx 下载最新版本Nginx nginx: download 解压 双击nginx.exe启动 浏览器访问 localhost 看到如下界面 微服务准备 准备两个服务&#xff0c;例如&#xff1a;product微服务和order微服务 分别启动后&#xff0c;访问相应服务接口 product服务 http://localhost:9001/…

detectron2环境搭建及自定义coco数据集(voc转coco)训练

detectron2建议ubuntu进行环境搭建&#xff0c;Windows大概率报错 一 环境搭建 创建虚拟环境 conda create -n detectron2 python3.8 -y conda activate detectron2后面下载源代码建议存到git中再git clone git clone https://github.com/facebookresearch/detectron2.git …

王道p40 1.设计一个递归算法,递归删除单链表L中所有值为x的结点(c语言)

视频讲解在这里&#xff1a;&#x1f447; p40 第1题 王道数据结构课后代码题c语言代码实现_哔哩哔哩_bilibili 本题代码如下 void delete(linklist* L,int x)//递归删除x {if((*L)->next! NULL){if ((*L)->next->data x)//找到x{lnode* p (*L)->next;(*L)-&…

【第2章 Node.js基础】2.2 Node.js回调函数

学习目标 &#xff08;1&#xff09;理解Node.js的回调函数&#xff1b; &#xff08;2&#xff09;掌握回调函数的使用。 什么是回调函数 回调函数是一种特殊的函数&#xff0c;它作为参数传递给另一个函数&#xff0c;并在特定的事件或条件发生时被调用。回调函数通常用于异…

FreeRTOS学习笔记——SysTick中断

FreeRTOS学习笔记——SysTick中断_freertos tick中断-CSDN博客 FreeRTOS 之六 任务调度原理解析&#xff08;Systick、PendSV、SVC&#xff09;_freertos m0-CSDN博客 FreeRTOS中关于时间的管理分为两部分&#xff1a;一部分是任务的延时管理;前面叙述过一些&#xff0c;还有…

找不到d3dx9_43.dll怎么办?解决d3dx9_43.dll丢失的5个方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dx9_43.dll”。这个错误通常出现在运行某些游戏或应用程序时&#xff0c;它是由于缺少DirectX组件中的d3dx9_43.dll文件所引起的。那么&#xff0c;当我们遇到这个问题时&#xff…

JWT 使用入门(三)请求流程

文章目录 1、前后端使用JWT详细步骤2、前后端使用JWT详情图3、从流程中看优点与缺点3.1 优点3.2 缺点 之前在第一篇中提到过其使用流程&#xff0c;以下讲的是第二种&#xff1a;https://blog.csdn.net/qq_37534947/article/details/132066909 但是JWT主要作用应该应用于以下&a…