当前位置: 首页 > news >正文

React是什么?


theme: condensed-night-purple
highlight: atelier-cave-light

React是什么?

官方的解释是:A JavaScript library for building user interfaces用于构建用户界面的 JavaScript 库

那为什么要选择用React呢?

原生的HTML、CSS、JavaScrip的方式存在

  1. 大规模应用难以维护:原生的开发方式通常会使代码变得非常复杂,特别是在大规模应用中,这可能导致代码难以维护。
  2. 页面渲染效率低:在原生方式中,页面渲染通常需要进行大量的DOM操作,这会导致页面渲染效率低下,尤其是在处理大量数据或复杂交互时。
  3. 缺乏组件化:原生方式通常缺乏组件化的支持,这会使代码的可复用性和可维护性变得非常低。
  4. 开发效率低:在原生方式中,需要自己手动管理页面状态和事件处理,这会使开发效率变得非常低下。

React的优点

  1. 可以很好的跨浏览器兼容,同时兼容多端
  2. 虚拟 DOM:React 通过使用虚拟 DOM 技术,可以将对 DOM 的操作最小化,从而提高性能和响应速度。当数据变化时,React 会先将新的数据与旧的数据进行比较,然后只更新有变化的部分,而不是重新渲染整个页面。
  3. 组件化开发:React 的核心思想是将 UI 拆分为独立的组件,每个组件都有自己的状态和行为,并且可以嵌套使用。这种组件化开发方式可以使得代码更加模块化、可重用,也更易于维护和测试。
  4. 单向数据流:React 的数据流是单向的,即自上而下的单向数据流。这种数据流可以使得应用程序的数据变化更加可预测和稳定,也更容易排查和解决 bug。
  5. 生态系统和社区支持:React 已经成为了现代 Web 开发的主流技术之一,拥有庞大的社区和生态系统支持。React 生态系统中有许多优秀的库和工具可以帮助开发人员更加高效地开发和管理 Web 应用程序。

React开发依赖

开发React必须依赖三个库:

  • react:包含react所必须的核心代码
  • react-dom:react渲染在不同平台所需要的核心代码
  • babel:将jsx转换成React代码的工具

这三个库都是是各司其职的,每一个库实现的功能都是不同的。

但其实在React的0.14版本之前是没有react-dom这个概念的,所有功能都包含在react里。那为什么要进行拆分呢?

原因就是react-native。react包中包含了react和react-native所共同拥有的核心代码。但是react-dom针对web和native所完成的事情不同:

  • web端:react-dom会讲jsx最终渲染成真实的DOM,显示在浏览器中
  • native端:react-dom会讲jsx最终渲染成原生的控件(比如Android中的Button,iOS中的UIButton)。

引入React依赖

我们在编写React代码时,这三个依赖都是必不可少的。那么,如何添加这三个依赖呢?

  • 方式一:直接CDN引入
  • 方式二:下载后,添加本地依赖
  • 方式三:通过npm管理(通过脚手架创建项目后再使用)

CDN方式

<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>

相关文章:

  • 从治理到“智”理,打造新一代金融数据体系
  • 通义千问调用笔记
  • 使用kettle做的数据同步案例
  • C/C++ string模拟实现
  • MYSQL execute command denied to user ‘‘@‘%‘ for routine
  • 腾讯《地下城与勇士:起源》手游在部分安卓平台停止更新
  • 微信小程序-上拉加载和下拉刷新
  • C类IP介绍
  • 【Java数据结构】优先级队列详解(二)
  • centos环境上:k8s 简单安装教程
  • 《算法设计与分析》第五六章:回溯法与分支限界法
  • FreeRTOS学习笔记-基于stm32(11)任务通知及相关API函数简介
  • 12306 火车票价格解析 (PHP 解析)
  • 洛谷 P1008 [NOIP1998 普及组] 三连击
  • 被拷打已老实!面试官问我 #{} 和 ${} 的区别是什么?
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【RocksDB】TransactionDB源码分析
  • es6要点
  • EventListener原理
  • git 常用命令
  • go语言学习初探(一)
  • javascript从右向左截取指定位数字符的3种方法
  • PAT A1017 优先队列
  • PAT A1050
  • php面试题 汇集2
  • React-Native - 收藏集 - 掘金
  • Vue组件定义
  • 当SetTimeout遇到了字符串
  • 官方解决所有 npm 全局安装权限问题
  • 规范化安全开发 KOA 手脚架
  • 回流、重绘及其优化
  • 来,膜拜下android roadmap,强大的执行力
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 优化 Vue 项目编译文件大小
  • 优秀架构师必须掌握的架构思维
  • 云大使推广中的常见热门问题
  • Mac 上flink的安装与启动
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 数据可视化之下发图实践
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​业务双活的数据切换思路设计(下)
  • ​字​节​一​面​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Redis 入门到精通(七)-- redis 删除策略
  • #if #elif #endif
  • (BFS)hdoj2377-Bus Pass
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (南京观海微电子)——COF介绍
  • (三)终结任务
  • (一)认识微服务
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • *2 echo、printf、mkdir命令的应用
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution