一看就懂的ReactJs入门教程-精华版

2023-11-18

  现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略ReactJs的风采吧~~ 文章有点长,耐心读完,你会有很大收获哦~

 一、ReactJS简介

  React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具。

ReactJS官网地址:http://facebook.github.io/react/

 

Github地址:https://github.com/facebook/react

 

 二、对ReactJS的认识及ReactJS的优点

 首先,对于React,有一些认识误区,这里先总结一下:

  • React不是一个完整的MVC框架,最多可以认为是MVC中的V(View),甚至React并不非常认可MVC开发模式;
  • React的服务器端Render能力只能算是一个锦上添花的功能,并不是其核心出发点,事实上React官方站点几乎没有提及其在服务器端的应用;
  • 有人拿React和Web Component相提并论,但两者并不是完全的竞争关系,你完全可以用React去开发一个真正的Web Component;
  • React不是一个新的模板语言,JSX只是一个表象,没有JSX的React也能工作。

1、ReactJS的背景和原理

  在Web开发中,我们总需要将变化的数据实时反应到UI上,这时就需要对DOM进行操作。而复杂或频繁的DOM操作通常是性能瓶颈产生的原因(如何进行高性能的复杂DOM操作通常是衡量一个前端开发人员技能的重要指标)。React为此引入了虚拟DOM(Virtual DOM)的机制:在浏览器端用Javascript实现了一套DOM API。基于React进行开发时所有的DOM构造都是通过虚拟DOM进行,每当数据变化时,React都会重新构建整个DOM树,然后React将当前整个DOM树和上一次的DOM树进行对比,得到DOM结构的区别,然后仅仅将需要变化的部分进行实际的浏览器DOM更新。而且React能够批处理虚拟DOM的刷新,在一个事件循环(Event Loop)内的两次数据变化会被合并,例如你连续的先将节点内容从A变成B,然后又从B变成A,React会认为UI不发生任何变化,而如果通过手动控制,这种逻辑通常是极其复杂的。尽管每一次都需要构造完整的虚拟DOM树,但是因为虚拟DOM是内存数据,性能是极高的,而对实际DOM进行操作的仅仅是Diff部分,因而能达到提高性能的目的。这样,在保证性能的同时,开发者将不再需要关注某个数据的变化如何更新到一个或多个具体的DOM元素,而只需要关心在任意一个数据状态下,整个界面是如何Render的。

如果你像在90年代那样写过服务器端Render的纯Web页面那么应该知道,服务器端所要做的就是根据数据Render出HTML送到浏览器端。如果这时因为用户的一个点击需要改变某个状态文字,那么也是通过刷新整个页面来完成的。服务器端并不需要知道是哪一小段HTML发生了变化,而只需要根据数据刷新整个页面。换句话说,任何UI的变化都是通过整体刷新来完成的。而React将这种开发模式以高性能的方式带到了前端,每做一点界面的更新,你都可以认为刷新了整个页面。至于如何进行局部更新以保证性能,则是React框架要完成的事情。

  借用Facebook介绍React的视频中聊天应用的例子,当一条新的消息过来时,传统开发的思路如上图,你的开发过程需要知道哪条数据过来了,如何将新的DOM结点添加到当前DOM树上;而基于React的开发思路如下图,你永远只需要关心数据整体,两次数据之间的UI如何变化,则完全交给框架去做。可以看到,使用React大大降低了逻辑复杂性,意味着开发难度降低,可能产生Bug的机会也更少。

 

2、组件化

  虚拟DOM(virtual-dom)不仅带来了简单的UI开发逻辑,同时也带来了组件化开发的思想,所谓组件,即封装起来的具有独立功能的UI部件。React推荐以组件的方式去重新思考UI构成,将UI上每一个功能相对独立的模块定义成组件,然后将小的组件通过组合或者嵌套的方式构成大的组件,最终完成整体UI的构建。例如,Facebook的instagram.com整站都采用了React来开发,整个页面就是一个大的组件,其中包含了嵌套的大量其它组件,大家有兴趣可以看下它背后的代码。

如果说MVC的思想让你做到视图-数据-控制器的分离,那么组件化的思考方式则是带来了UI功能模块之间的分离。我们通过一个典型的Blog评论界面来看MVC和组件化开发思路的区别。

对于MVC开发模式来说,开发者将三者定义成不同的类,实现了表现,数据,控制的分离。开发者更多的是从技术的角度来对UI进行拆分,实现松耦合。

对于React而言,则完全是一个新的思路,开发者从功能的角度出发,将UI分成不同的组件,每个组件都独立封装。

在React中,你按照界面模块自然划分的方式来组织和编写你的代码,对于评论界面而言,整个UI是一个通过小组件构成的大组件,每个组件只关心自己部分的逻辑,彼此独立。

React认为一个组件应该具有如下特征:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一看就懂的ReactJs入门教程-精华版 的相关文章

随机推荐

  • SQL基础 读书笔记 第一章

    SQL基础教程 笔记 第一章 表格的新建 修改和删除 1 DDL DML DCL DDL 数据定义语言 CREATE DROP ALTER ALTER 修改数据库和表等对象的结构 比如增加 修改约束条件 比如 修改字段属性 INT 改为CH
  • 以OpenGL/ES视角介绍gfx-hal(Vulkan) Shader/Program接口使用

    文档列表见 Rust 移动端跨平台复杂图形渲染项目开发系列总结 目录 背景 The right way to tackle this in Vulkan is to use resource descriptors A descriptor
  • java关于通用分页参数的传递方式

    1 第一种 通过一个基础类 基础类中是所有类共有的属性 把pageSize和pageNum都放在基础类中 其他类全部继承基础类 如下 QuestionActivitiQueryReq类继承BasePage类 BasePage类就是专门用来放
  • LVM逻辑卷与条带卷管理

    逻辑卷管理器LVM Logical Volume Manager 在硬盘分区和文件系统之间添加了一个逻辑层 提供了一个抽象的卷组 允许多块硬盘进行卷组合并 不必关注物理硬盘设备的底层架构和布局 实现对硬盘资源的动态调整 条带化逻辑卷在物理卷
  • 组网学习之可扩展性设计(一)

    可扩展性设计策略 可靠性 1 设计冗余链路 为了保证可靠性 问题 会有环路 生成广播风暴 利用树协议解决广播风暴 增加网络带宽 聚合链路 采用分层的网络协议 rip 小型网络 与ospf 大规模 area用来划区域 0为骨干层 采用ap 无
  • 关于Visual Studio编译scanf报错问题以及一劳永逸的解决方法!

    前言 相信很多使用vs编译器初学C语言的同学 刚开始都能碰到这个问题 当你在代码使用了scanf vs编译器就会报错 不管你是2013还是2022以及其他版本都会报错 如上图所示 注意 C语言当中本身scanf是不会错的 怎么解决呢 先来看
  • in _create_inference_session raise ValueError(“This ORT build has {} enabled

    问题 line 363 in create inference session raise ValueError This ORT build has enabled format available providers ValueErro
  • Linux宝塔面板搭建Discuz论坛, 并公网远程访问【内网穿透】

    文章目录 前言 1 安装基础环境 2 一键部署Discuz 3 安装cpolar工具 4 配置域名访问Discuz 5 固定域名公网地址 6 配置Discuz论坛 前言 Crossday Discuz Board 以下简称 Discuz 是
  • jupyter notebook导入模块时报错:ModuleNotFoundError: No module named

    背景 基于anaconda创建虚拟环境后 在虚拟环境中打开jupyter notebook 创建python文件在文件中导入模块时报错 原因 1 虚拟环境中未安装此模块 2 安装完模块后 没有添加核 kernel 解决办法 1 激活虚拟环境
  • IIS7解析漏洞复现

    首先我们在win7上安装IIS7 控制面板 程序 打开或关闭windows功能 勾选如下信息 尽量勾选多一点防止实验失败 点击确定 稍等 在windows7虚拟机安装phpstudy2018版本 可先在物理机下载压缩包 然后上传到虚拟机 然
  • 工程职业伦理_Mooc_2018_期末考试答案

    1 直接在浏览器中在此页面按下ctrl F打开搜索框 2 复制原题目的部分 全部 3 在此页面的搜索框中粘贴复制的内容 即可直接找到此题目 加粗字体为正确答案 直接复制过来的 格式不太好看 单选题 1 1分数 当工程风险产生的不利后果比较严
  • delphi listview动态添加图片_南通启东【长泰海滨城】售楼处电话-位置-价格-开盘时间-最新动态【官网】...

    南通启东 长泰海滨城 售楼处电话 位置 价格 开盘时间 最新动态 官网 2020 10 29 14 38 来源 搜狐焦点淮北站 原标题 南通启东 长泰海滨城 售楼处电话 位置 价格 开盘时间 最新动态 官网 南通启东 长泰海滨城 售楼中心
  • 05笔趣阁小说爬取--爬取作者所有小说

    前面的程序已经实现了从笔趣阁自动爬取整部小说 接下来在之前的基础上 将功能进一步扩展 实现自动爬取某一作者在笔趣阁中的所有小说 继续以方想为例 下图是方想作品列表的页面 https www 52bqg com modules article
  • 伺服怎么接单相220伏_220v电表怎么接线?如何接单相电表?普通家用电表怎么接线...

    以下文章来源于电工电气学习 作者 电工电气学习 单相有功电度表 简称 单相电度表 由接线端子 电流线圈 电压线圈 计量转盘 计数器构成 只要电流线圈通过电流 同时电压线圈加有电压 转盘就受到电磁力而转动 单相电度表共有5个接线端子 其中有两
  • 如何把桌面显示的文件都放在D盘

    1 改目录 具体如下 先在d盘建一个文件夹 然后点开始 运行 regedit 点击HKEY CURRENT USER Software Microsoft Windows CurrentVersion Explorer user Shell
  • leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

    虽然只是一道中等难度的题目 但是看了官方的解答 有很精彩的地方 但是总体代码写得不算优雅 class Solution returns leftmost or rightmost index at which target should b
  • 使用 mock 模拟登录接口数据

    mock js模拟登录接口 第一步 打开apipost 通过mock服务来进行编写登录接口 选择为mock环境 第二步 编写自己的登录接口 apipost支持 req body对象 当 post 请求以 x www form urlenco
  • SpringSecurity+JWT认证流程解析

    楔子 本文适合 对Spring Security有一点了解或者跑过简单demo但是对整体运行流程不明白的同学 对SpringSecurity有兴趣的也可以当作你们的入门教程 示例代码中也有很多注释 大家在做系统的时候 一般做的第一个模块就是
  • 【内外网映射】通过外网ip来访问虚拟机服务器【原创】

    经试验 可以通过外网访问家里笔记本win 7里面的虚拟机vmvare的Ubuntn服务器 比如用手机来访问笔记本电脑的虚拟机的服务器等 注意 win 7的ip地址和虚拟机的ip地址的网段是不一样的 特别注意 只适用于公网ip是固定的 不固定
  • 一看就懂的ReactJs入门教程-精华版

    现在最热门的前端框架有AngularJS React Bootstrap等 自从接触了ReactJS ReactJs的虚拟DOM Virtual DOM 和组件化的开发深深的吸引了我 下面来跟我一起领略ReactJs的风采吧 文章有点长 耐