[Web Fronted] 前端框架: React

news/2025/2/28 19:57:33/文章来源:https://www.cnblogs.com/johnnyzen/p/18651691

  • 部分开源项目是基于 Web 前端框架 React 构建的,有必要了解一二。

避免一脸懵逼,不知道怎么修改相关代码和配置

概述: React

React 的简介

  • React 起源于 Facebook内部项目

因为该公司对市场上所有 JavaScript MVC 框架 都不满意,就决定自己写一套,用来架设 Instagram 的网站。
做出来以后,发现这套东西很好用,就在2013年5月开源了。

  • React 是一个用于动态构建用户界面的 JavaScript 库(只关注于视图)。

React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。
React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

React 的特点

  1. 声明式设计与编码 − React采用声明范式,可以轻松描述应用。

  2. 高效 − React通过对DOM的模拟,最大限度地减少与DOM的交互。

高效(优秀的Diffing算法)

  1. 灵活 − React可以与已知的库或框架很好地配合。

  2. JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。

  3. Component & 组件化编码 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。

  4. 单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

单向数据绑定

  1. 虚拟 DOM

  2. React Native 编写原生应用

React 高效的原因

  • 使用虚拟(virtual)DOM, 不总是直接操作页面真实DOM。
  • DOM Diffing算法, 最小化页面重绘。

React 官网

  • https://reactjs.org/
  • https://react.dev/ 【现官网】
  • https://react.docschina.org/ 【中文官网】
  • https://github.com/facebook/react
  • https://github.com/facebook/react/releases

React 的主要原理

  • 传统的web应用操作DOM一般是直接更新操作

但是我们知道DOM更新通常是比较昂贵的。
而React为了尽可能减少对DOM的操作,提供了一种不同的而又强大的方式来更新DOM,代替直接的DOM操作。
就是VirtualDOM,一个轻量级的虚拟的DOM,就是React抽象出来的一个对象,描述dom应该什么样子的,应该如何呈现。
通过这个Virtual DOM去更新真实的DOM,由这个Virtual DOM管理真实DOM的更新。

  • 为什么通过这多一层的Virtual DOM操作就能更快呢? > + 这是因为React有个diff算法,更新VirtualDOM并不保证马上影响真实的DOM,React会等到事件循环结束,然后利用这个diff算法,通过当前新的dom表述与之前的作比较,计算出最小的步骤更新真实的DOM。

最明显的一点好处就是React所谓的 dom diff ,能够实现delta级别的dom更新。
当有数据变动导致DOM变动时,React不是全局刷新,而是通过它内部的dom diff 算法计算出不同点,然后以最小粒度进行更新。
这也是React号称性能好的原因。

Facebook为什么要建造React

  • Facebook的工程师在做大型项目时,由于他们非常巨大的代码库和庞大的组织,使得MVC很快变得非常复杂,每当需要添加一项新的功能或特性时,系统的复杂度就成级数增长,致使代码变得脆弱和不可预测,结果导致他们的MVC正在土崩瓦解,所以Facebook认为MVC不适合大规模应用,当系统中有很多的模型和相应的视图时,其复杂度就会迅速扩大,非常难以理解和调试,特别是模型和视图间可能存在的双向数据流动。

基于上面的原因,Facebook认为MVC无法满足他们的扩展需求,为了解决上述问题需要“以某种方式组织代码,使其更加可预测”,于是他们提出的FluxReact来实现。

React Hello World Application

Hello World Application

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Hello, React Application!</title><!-- 引入 React 核心库 --><!-- <script src="../js/react.development.js"></script> --><script src="https://unpkg.com/react@18/umd/react.development.js"></script><!-- 引入 react-dom 用于支持 react 操作 DOM --><!-- <script src="../js/react-dom.development.js"></script> --><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><!-- 引入babel:1. ES6 ==> ES52. jsx ==> js--><!-- <script src="../js/babel.min.js"></script> --><!-- 生产环境中不建议使用 | 在浏览器中使用 Babel 来编译 JSX 效率是非常低的 --><script src="https://unpkg.com/babel-standalone@6.26.0/babel.min.js"></script>
</head>
<body><!-- 准备好一个 DOM 容器 --><div id="test"></div><!-- 方式1 --><!-- <script type="text/babel">// 1. 创建虚拟 DOMconst VDOM = <h1>Hello,React</h1>// 2. 渲染到页面中的指定 DOM// ReactDOM.render(虚拟DOM,真实DOM)ReactDOM.render(VDOM,document.getElementById('test'))</script> --><!-- 方式2 --><script type="text/babel">// 简单的 React 组件function App() {return <h1>Hello, React Application!!</h1>;}const root = ReactDOM.createRoot(document.getElementById("test"));// 渲染 React 组件到 DOMroot.render(<App />);</script>
</body>
</html>

效果

基础库的导入

  • React 库: 用于构建用户界面。
  • ReactDOM 库:用于在浏览器中渲染 React 组件。
  • Babel Standalone 库:用于在浏览器中即时编译 JSX 语法。(不建议生产环境中使用)
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/react/18.2.0/umd/react.production.min.js"></script>
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/react-dom/18.2.0/umd/react-dom.production.min.js"></script><!-- 生产环境中不建议使用 | 在浏览器中使用 Babel 来编译 JSX 效率是非常低的 -->
<script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/babel-standalone/6.26.0/babel.min.js"></script>

除了通过 javascript 导入3个基础库的方式外,还可以使用 create-react-app 工具创建的 react 开发环境:

import React from "react";
import ReactDOM from "react-dom";function Hello(props) {return <h1>Hello World!</h1>;
}ReactDOM.render(<Hello />, document.getElementById("root"));

Y 推荐资源

  • 官网
  • 快速入门教程

https://react.docschina.org/learn
教程:井字棋游戏 | https://react.docschina.org/learn/tutorial-tic-tac-toe
React 哲学 | https://react.docschina.org/learn/thinking-in-react

  • 在线编辑与效果试验
  • https://www.runoob.com/try/try.php?filename=try_react_hw
  • React JS Download & CDN
  • React 官方

http://react-cn.github.io/react/downloads.html

<!-- 生产环境中不建议使用 | 在浏览器中使用 Babel 来编译 JSX 效率是非常低的 -->
<script src="https://unpkg.com/babel-standalone@6.26.0/babel.min.js"></script>//development
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://fb.me/react-0.14.3.js"></script>
<script src="https://fb.me/react-dom-0.14.3.js"></script><script src="https://fb.me/react-with-addons-0.14.3.js"></script>
<script src="https://fb.me/react-dom-0.14.3.js"></script>//production
<script src="https://fb.me/react-0.14.3.min.js"></script>
<script src="https://fb.me/react-dom-0.14.3.min.js"></script><script src="https://fb.me/react-with-addons-0.14.3.min.js"></script>
<script src="https://fb.me/react-dom-0.14.3.min.js"></script>//npm方式
var React = require('react');
var ReactDOM = require('react-dom');
ReactDOM.render(<App />, ...);
  • 字节跳动的 React CDN 库
  • https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/react/18.2.0/umd/react.production.min.js
  • https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/react-dom/18.2.0/umd/react-dom.production.min.js
  • https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/babel-standalone/6.26.0/babel.min.js
react.js: React 的核心库,用于构建用户界面。
react-dom.js: 提供与 DOM 相关的操作,用于在浏览器中渲染 React 组件。
babel.js: 用于将 ES6+ 代码转换为向后兼容的 JavaScript 版本,确保代码在不同浏览器中的兼容性。
  • Staticfile CDN 的 React CDN 库
<script src="https://cdn.staticfile.org/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/18.2.0/umd/react-dom.development.js"></script>
<!-- 生产环境中不建议使用 -->
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
  • https://gitcode.com/open-source-toolkit/6a556/ (开源工具包 - React.js 核心文件包下载)
<script src="path/to/babel.js"></script>
<script src="path/to/react.js"></script>
<script src="path/to/react-dom.js"></script>

X 参考文献

  • React 教程 - 菜鸟教程

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15C++循环结构-while循环(2)——教学

1、while语句的应用; 2、双精度实数double及科学计数法; 3、分数化为小数一、while语句的应用 (第44课 角谷猜想)参考视频1 问题:对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1,这就是由日本数学家角谷静夫发现的…

Xshell 8 Build 0065中文免安装绿色版

前言 Xshell8是一个非常受欢迎的远程连接管理软件,它的界面简单易懂,用起来特别方便。能支持好多种连接方式,比如SSH1、SSH2、SFTP、TELNET等等,还有串行协议和其他一些高级功能,基本上你想连什么都能满足。而且,它还支持好多种不同的终端类型,比如VT100、VT220、XTERM、…

大语言模型提示技巧(四)-文本概括

文本概括是大语言模型的常用功能之一,我们总结一段文字、一篇文章的主要内容,一篇论文的摘要,甚至一本书的简介都属于文本概括的范畴。文本概括是大语言模型的常用功能之一,我们总结一段文字、一篇文章的主要内容,一篇论文的摘要,甚至一本书的简介都属于文本概括的范畴。…

软件设计师考试知识点

https://www.cnblogs.com/mh20131118/p/11334612.html https://www.cnblogs.com/blog-cjz/p/16005106.html 本人已将笔记、历年真题与解析、备考方法整理压缩至【百度网盘】,需要资源的同学可以通过点击下面云盘链接进行保存下载。链接失效的话请在文章下面评论或私信我,我看…

DVWA靶场Insecure CAPTCHA(不安全验证)漏洞所有级别通关教程及源码审计

Insecure CAPTCHA(不安全验证) Insecure CAPTCHA(不安全验证)漏洞指的是在实现 CAPTCHA(完全自动化公共图灵测试区分计算机和人类)机制时,未能有效保护用户输入的验证信息,从而使得攻击者能够绕过或破解该验证机制。这类漏洞通常出现在网络应用程序中,目的是防止自动化…

摄影

曝光三要素 光圈(F):控制进光量的装置 快门(1/x):接收光线的时间 感光度(ISO):感光器件对光线的敏感程度 快门(1/x) 快门快 数值小 画面暗 快门慢 数值大 画面亮 快门影响画面动态模糊(如果要保证拍摄的物体,不模糊,快速速度要大于物体运动的速度) 安全快门:保证…

浅谈文本匹配

本文探讨了文本匹配的演变,从字面匹配到语义匹配,分析了各自的特点与挑战。字面匹配关注文本的精确重合度,而语义匹配则试图理解文本的深层含义。尽管语义匹配在处理复杂关系时更具优势,但仍面临长短文本匹配、词序感知和多实体关系等难题。期待未来大模型能进一步提升语义…

记第一次DC靶场渗透

前言:听了朋友的说渗透可以快速入门,心血来潮去刷了DC-1这个靶场,结果老实了,跟着wp做了一遍,许多不懂的地方就去搜知识点,记了个笔记也是花了1天左右的时间。顺便水一篇博客借鉴的WP: DC-1靶场搭建及渗透实战详细过程(DC靶场系列) 开始渗透之旅: 前置: DC靶场网上一…

[网络] 反向代理与内网穿透:FRPC

缘起: GradioGradio是一款快速构建AI Web演示应用的Python Web框架(主要适用于科研、实验室,而非ToC的Web应用),其支持本地运行和远程访问。1个极简的Gradio代码:app.pyimport gradio as gr # 导入gradio库,gradio用于快速创建机器学习模型的web界面# 定义一个名为greet…

windows11使用pycharm连接wsl2开发基于poetry的python项目

windows11使用pycharm连接wsl2开发基于poetry的python项目 背景:公司开发的python项目用到了某个只提供了Linux版本的包,遂研究了一番如何在windows环境下进行开发。windows安装 wsl2 进入到wsl2中,安装对应的python版本,建议使用pyenv,下面以3.10.14版本为例子。 pyenv安…

【反爬虫】接口安全的风控介绍

#风控 #接口信息安全 #业务线 一、接口反爬背景二、反爬数据流框架介绍2.1 数据接入风控2.2 风险感知和策略迭代2.2.1 短线近实时监控告警2.2.2 风控策略部署2.3 异常流量处置能力2.4 网关验签组件的设计和应用2.4.1 验签整体架构2.4.2 接口验签加密流程三、反爬效果体现3.1 普…

发布blazor应用到Linux, 使用nginx作为WebSocket代理

Blazor 使用了SignalR连接, 而SignalR使用的是WebSocket WebSocket协议提供了一种创建支持客户端和服务器之间实时双向通信的 Web 应用程序的方法。作为 HTML5 的一部分,WebSocket 使开发此类应用程序比以前的方法容易得多。大多数现代浏览器都支持 WebSocket,包括 Chrome、F…