1、React的特色html
一、自动化的UI状态管理:自动完成数据变化与界面效果的更新。 react
二、虚拟DOM:建立1个虚拟的dom节点树,放在内存里(内存修改数据效率高),数据变化时先修改内存里的虚拟DOM,而后与页面的DOM进行对比,React能够作优化,优化后可只修改变化的部分,缩小节点更改的范围,从而提升效率。(正常状况下改变节点后要从新渲染页面,效率慢)。浏览器
三、组件化开发:管理页面的各功能,将1个功能视为1个组件。每一个组件均可以有各自的结构、样式、行为,而后把全部的组件拼合起来的开发方式。单页应用的实现方式。babel
四、彻底在js中定义UI:一个组件就是1个js。架构
五、JSX:JavaScript XML。使React的标签写法像html那样来编写dom
六、只是MVC构架中的V:MVC是一种架构模式,model(模型:获取数据)→ view(视图:渲染)→controller(控制器:关联数据与视图)。函数
七、单向数据流:只能父级传子级,便于追踪数据的来源。组件化
2、建立一个React应用性能
一、引入两个React的在线js文件:优化
<script crossorigin src="js/react.development.js"></script> <script crossorigin src="js/react-dom.development.js"></script>
二、使用:
①渲染到页面:ReactDOM.render();
②建立元素:React.createElement()
- 参数1:元素名
- 参数2:元素属性,格式为JSON。多个单词用驼峰命名,class属性要写成className
- 参数3:标签内容,能够是文本,也能够是另外一个元素对象。
三、JSX语法
①引入JSX编译器 babel.min.js ,而后在script里写入type值为text/babel,让浏览器认为该代码为JSX代码。可是该方法编译速度很慢,效率低。
②JSX规则与XML一致:
- 容许嵌套
- 标签必须严格闭合
- 属性:
- 大部分属性和HTML标签一致
- 两个特殊:for→htmlFor class→className
- 能够自定义属性
- 引用变量必须用 {}花括号,花括号中可作运算
- 引用组件用<>尖括号
- 注释,{/*注释*/} ,要加花括号
- style属性要写成花括号形式,如:style={{color:"red"}};
3、React的组件
一、组件是编写React应用的基础,一个应用就是由大大小小的组件组合而成。
二、组件分类:
- 无状态组件:普通函数定义,无状态,没有生命周期,可以优化性能。
- 有状态组件:推荐ES6语法定义,React内部会建立实例,并拥有完整的生命周期。
三、组件规范
- 每一个组件必须有返回值,若是返回值又是一个组件则必须有且仅有一个根元素,即return后面必须有1个标签,要有返回值的起始。
- 若是返回null/false,编译时会被替换为< noscript />
4、数据传递的props
一、每一个函数的参数里都有props。从父组件能够经过属性传递数据到子组件。获得的对应属性值可用props调用。
二、数据能够在组件之间传递,不过只能是单向,由父传子。
三、经过自定义属性传递
- 无状态组件:直接用props传递
- 有状态组件:用this.props传递
四、经过文本内容传递:
- 无状态组件:
- 有状态组件:
5、给组件单独设置样式
经过class属性来设置样式使得组件的内聚度不够,能够经过组件的style来为每一个组件单独设置样式。(如有短线链接的要使用驼峰命名)
6、组件状态更新(state)
一、使用ref获取节点,利用DOM完成节点操做
二、使用state对象:
- 初始化: 在constructor里初始化
- 使用:直接用this.state进行调用state。
其中onClick={this.addCount}是xml里的事件处理方式,也能够直接在花括号里写函数,可是当函数体较大时,能够单独定义。
三、函数定义方法:在render前(同级)定义函数。
- 事件绑定的时候,即仅限事件处理函数,该函数里的this指向被改变成了undefined,因此改回来.
- 方法一:在调用函数里写onClick={this.addCount.bind(this)},强行将this绑定到以前的this上
- 方法二:使用箭头函数 addCount = ()=>{}
7、props和state的区别
一、props:
- 用于在组件之间传递数据。
- 经过自定义属性或标签之间的内容传递。
- 单向传递,只能父传子。
- 能够手动设置其值,但不会更新组件状态。
二、state:
- 每一个组件均可以初始化state对象。
- state不能传递,传递只能用props
- 能够设置值,对应的组件状态会更新,能够经过响应式更改UI节点
- 设置值的方法必须是setState,而不是直接使用this.state。
8、事件处理中的this
一、在ES6的类中,事件处理方法的this为undefined。
二、解决办法:
- 在构造函数中将当前对象绑定给方法中的this。
- 使用箭头函数定义方法。
- 在绑定事件时使用bind方法。
- 在绑定事件时使用箭头函数。