前  言

  React 是一个用于构建[用户界面]的 JAVASCRIPT 库。
  React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。
  React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。
  React 拥有较高的性能,代码逻辑非常简单。

  1、React 特点

 

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

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

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

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

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

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

  2、基本概念

  

  ① 虚拟DOM(Virtual DOM)机制:对于每一个组件,React会在内存中构建一个相对应的DOM树,
  基于React开发时所有的DOM构造都是通过虚拟DOM进行,每当组件的状态发生变化时,React都会重新构建整个DOM数据。
  然后将当前的整个DOM树和上一次的DOM树进行对比,得出DOM结构变化的部分(Patchs),然后将这些Patchs再更新到
  真实DOM中。

  优点:避免了当页面数据发生变化时,DOM也被全部更新一遍并进行重新渲染。
  整个过程都是在内存中进行,减少了不必要的性能开销,因此是非常高效的。

  ② JSX语法:
  定义:JSX=JavaScript XML,是一种在React组件内部构建标签的类XML语法。
  React在不使用JSX的情况下一样可以工作,但是使用JSX可以提高组件的可读性,增强JS语义,结构清晰,抽象程度高,代码模块化。

  特点:
  1、元素名首字母大写
  2、符合嵌套规则
  3、可以写入求值表达式
  4、驼峰式命名
  5、不能使用javascript原生函数的一些关键词,如for和class。需要替换成htmlFor和className
  6、HTML语言直接写在 JavaScript 语言之中,不加任何引号,它允许 HTML 与 JavaScript 的混写.。

  优点:
  1、JSX 执行更快。
  2、它是类型安全的,在编译过程中就能发现错误。
  3、使用 JSX 编写模板更加简单快速。

  ③ JSX 的基本语法规则:
  遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;
  遇到代码块(以 { 开头),就用 JavaScript 规则解析;

3 、React.js/Angular.js/Vue.js的对比

  

  1、数据流(数据绑定)
  ① Angular 使用双向绑定即:界面的操作能实时反映到数据,数据的变更能实时展现到界面。
  ② Vue 也支持双向绑定,默认为单向绑定,数据从父组件单向传给子组件。
  ③ React推崇的是函数式编程和单向数据流
  即给定原始界面(或数据),施加一个变化,就能推导出另外一个状态(界面或者数据的更新)。

  2、视图渲染
  ① AngularJS的工作原理是:HTML模板将会被浏览器解析到DOM中, DOM结构成为AngularJS编译器的输入
  (NG框架是在DOM加载完成之后, 才开始起作用的)
  ② React 的渲染建立在 Virtual DOM 上,一种在内存中描述 DOM 树状态的数据结构。
  当状态发生变化时,React 重新渲染 Virtual DOM,比较计算之后给真实 DOM 打补丁。
  ③ Vue.js 不使用 Virtual DOM 而是使用真实 DOM 作为模板,数据绑定到真实节点。

  3、模块化与组件化
  ① Angular 依赖注入来解决模块之间的依赖问题
  ② Vue.js 指令只封装 DOM 操作,而组件代表一个自给自足的独立单元 —— 有自己的视图和数据逻辑操作。
  ③ React构建于组件之上,重要属性props,state。一个组件就是通过这两个属性的值在 render 方法里面生成这个组件对应的 HTML 结构。

  4、语法与代码风格
  ①Angular 2 依然保留以 HTML 为中心。Angular 2 将 “JS” 嵌入 HTML。
  ② Vue.js Vue 也是以 HTML 为中心,将 “JS” 嵌入 HTML,但是进阶之后推荐的是使用 webpack + vue-loader 的单文件组件格式。
  ③ React 推荐的做法是 JSX + inline style,也就是把 HTML 和 CSS 全都整进 JavaScript

  

4 、模板语法

  一、基本结构

  ReactDOM.render()是最基本的方法,作用是将模板转化为HTML语言,
  并将其插入到DOM节点中。

  

            ReactDOM.render(
<h1>你好!React</h1>,
//此处,必须使用JS原生的方法取到节点,而不能使用JQuery的方法获取节点!
document.getElementById("example1")
)

   二、基本样式写法:
     ① React推荐使用内联样式!(使用小驼峰命名法则)
     ② React会在指定的元素数字之后自动添加像素单位px

            var myStyle = {
fontSize:100,
color:'red'
}
var testStyle = {
width:800,
height:500,
backgroundColor:'yellow'
}
ReactDOM.render(
<div style={testStyle}>
<h1 style={myStyle}>
这段文字使用了内联样式!
</h1>
</div>,
document.getElementById("example2")
)

  三、使用React遍历一个数组:
  JSX允许直接在模板中插入JS变量,如果这个变量是一个数组的话,
  会自动展开这个数组的所有成员。

            var arr = [
<h1 key="1">这是数组的元素1</h1>,
<h1 key="2">这是数组的元素2</h1>,
<h1 key="3">这是数组的元素3</h1>
]; ReactDOM.render(
<div>{arr}</div>,
document.getElementById("example3")
)
5 、组件

 

  React组件:
  1、React允许将代码封装成组件,然后像插入普通的HTML标签一样,
  在网页中插入这个组件。
  2、创建组件及输入组件:
   ① 创建
   var HelloMessage = React.createClass({
  render : function(){
  return <h1>这是一个自定义组件!</h1>
  }
  });
  ② 输入:使用伪类标签实例化组件类并输出信息
  <HelloMessage/>
  3、注意事项:
  ① 自定义React组件的类名必须使用大写字母开头!(大驼峰法则)
  ② 所有的组件都必须要有自己的render方法!
  ③ 组件类只能包含一个顶层标签,但是可以嵌套标签!
  ④ 在调用组件的时候,如果想要多次调用同一个组件,需要给组件
  设置一个根标签,将其包裹。
  ⑤ 组件可以任意加入属性,属性可以在组件类的this.props.对象上获取
  Tips:
  class属性要写成className
  for属性要写成htmlFor
  因为class和for都是原生JS的保留字

            var HelloMessage = React.createClass({
render : function(){
return <h1>这是一个自定义组件!----{this.props.name}----{this.props.age}----</h1>
// <p>这是一个测试标签</p>
}
});
ReactDOM.render(
<div>
<HelloMessage name = "这是组件的name属性!" age = "这是组件的age属性!"/>
<HelloMessage/>
</div>,
document.getElementById('example')
);

  结尾

 今天就先介绍这么多,下一期再介绍稍微深度的内容。

高性能前端框架React详解的更多相关文章

  1. 转: javascript模块加载框架seajs详解

    javascript模块加载框架seajs详解 SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加 ...

  2. redux-saga框架使用详解及Demo教程

    redux-saga框架使用详解及Demo教程 前面我们讲解过redux框架和dva框架的基本使用,因为dva框架中effects模块设计到了redux-saga中的知识点,可能有的同学们会用dva框 ...

  3. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...

  4. 测试框架mochajs详解

    测试框架mochajs详解 章节目录 关于单元测试的想法 mocha单元测试框架简介 安装mocha 一个简单的例子 mocha支持的断言模块 同步代码测试 异步代码测试 promise代码测试 不建 ...

  5. Android热门网络框架Volley详解[申明:来源于网络]

    Android热门网络框架Volley详解[申明:来源于网络] 地址:http://www.cnblogs.com/caobotao/p/5071658.html

  6. 【python3+request】python3+requests接口自动化测试框架实例详解教程

    转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...

  7. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

  8. 前端框架React Js入门教程【精】

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  9. hadoop大数据基础框架技术详解

    一.什么是大数据 进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB ...

随机推荐

  1. 使用JavaScript实现ATM取款机

    ATM机需求描述如下: 假设一个简单的ATM机的取款过程为:  首先提示用户输入密码(password),假设默认密码为111111,最多只能输入3次,  超过3次则提示用户"密码错误,请取 ...

  2. ACM-ICPC北京赛区(2017)网络赛_Minimum

    题目9 : Minimum 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, -, a2^k ...

  3. 【京东账户】——Mysql/PHP/Ajax爬坑之产品列表显示

    一.引言 实现京东的账户项目,功能模块之一,产品列表显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:产品表 添加多条记录 /**产 ...

  4. Android忽略文件以及.gitignore规则不生效的可行解决方案

    github官方的忽略规则:https://github.com/github/gitignore/blob/master/Android.gitignore 我司项目中的忽略规则: *.iml .g ...

  5. Java钉钉开发_02_免登授权(身份验证)(附源码)

    源码已上传GitHub: https://github.com/shirayner/DingTalk_Demo 一.本节要点 1.免登授权的流程 (1)签名校验 (2)获取code,并传到后台 (3) ...

  6. 初识HBase

    现如今,分布式架构大行其道,实际项目中使用HBase也是比比皆是.虽说自己在分布式方面接触甚少,但作为程序猿还是需要不断的给自己充电的.网上搜索了一些教程,还是觉得<HBase权威指南>不 ...

  7. Centos7虚拟机桥接模式

    主机ping不通虚拟机centos7系统的ip大多有以下原因: 1.主机与centos7ip段对应 (关键是网关.dns服务器要一一对应,具体操作见后文) 2.对应后仍然不通的,可关闭主机与cenos ...

  8. Python系列之lambda、函数、序列化

    lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...

  9. 为db2用户添加db2命令及jdk环境变量配置

    AIX系统:db2inst用户 在/home/db2inst/.profile文件下新增以下代码(包括用户环境变量配置,具体路径取决于jdk安装的路径) PATH=/usr/bin:/etc:/usr ...

  10. mybatis 和hibernate的区别

    mybaits 是不完全的orm(对象关系映射(Object Relational Mapping)框架,需要自己书写sql语句 mybatis学习难度必hibernate低适合关系型模型要求不高的软 ...