前言
本篇会简明扼要的介绍一下React的使用方法。代码会用JSX+ES5和JSX+ES6两种方式实现。
React简介
React来自Facebook,于2013年开源。至今不断修改完善,现在已经到达了版本0.14.2。可以注意到版本还没有到1.0, 普遍应用到大部分产品中还需要一定的时间。2015年3月份,FaceBook发布了React Native,一个用react来构建native app的框架。
步入正题,React是一个javascript的类库,用于构建用户界面。
三个特点
JUST THE UI
不同于Angularjs框架,React不属于MVC框架,它可以算是MVC里面的V层,所以相对来说入门也简单一下(只指入门,深度研究的话也不简单)。
VIRTUAL DOM——虚拟DOM
虚拟dom其实是轻量的js对象,只保留了原生dom的一些常用的属性和方法。
自定义标签
学习React需要有一种全新的思路去看待view层的构建。除了使用html原生的标签,开发者还可以自定义标签(即虚拟DOM,最终给浏览器渲染的时候会解析成原生dom),自然代码解耦的效果会很明显,也更易读。
性能提升
在大家优化代码性能的时候,一定会关注有没有多余的dom操作,这是因为dom相关的操作耗时比较长。就算是创建一个空标签,也许要初始化它的各种默认属性和事件。
React渲染页面并不直接操作dom,而是先通过diff算法比较前后虚拟dom的差异。这最大程度的简化dom操作,大大提高了性能。由于只是局部更新dom,所以只是局部刷新。
换而言之,虚拟dom的出现,是因为目前js的性能比DOM渲染的性能要好,所以可以用更多的js操作换取更少的dom操作。也不排除如果将来有一天dom的性能和js差不多的时候,虚拟dom也许就没那么大的意义了。
DATA FLOW
React是单向响应的数据流。
React相关知识简介
jsx
一种特殊的js语法,可以在js代码中直接使用html标签。是个语法糖,提高编写代码效率。
要注意不能在标签的中间添加注释,因为最终还是要翻译成原生js,标签中添加注释相当于在一行代码还没完的时候就添加注释。
在jsx中,变量用花括号包围起来,花括号内的语句将以js代码的方式解析。
例如:
// 用纯js在react中创建a标签
var newDom=
var newDom=Hello!;
要让浏览器认识这种新的语法,就需要下面介绍的babel了。
babel
是一个javascript代码转换器,在这里我们可以用于jsx转换为原生js,es6转换为es5(大部分都能转换)。当然它的功能不只这些,有兴趣的可以去babel官网看看。它还有个线上的转换器,代码比较简单的时候用这个排查问题或练习es6很方便。
介绍两种常用的使用方式:
一种是浏览器来编译,因为实时编译会很慢,所以适合代码量比较小的。只需在html中引用: