React 介绍
概述
A JavaScript library for building user interfaces
用来构建用户界面一个JS库
理念
UI = render(data)
数据驱动视图
UI:视图,一个函数的执行结果
render:纯函数,没有任何副作用
data: state,状态驱动视图变化
Virtual DOM 虚拟DOM
直接修改DOM元素的代价太大,通过虚拟DOM的变化,引起真实DOM的变化,相对cheap。
流程图
事件 —-> render —-> virtual DOM 变化 —-> DOM节点修改
数据
props 组件对外接口
state 组件内部状态
区别
- prop用于定义外部接口
- state用于记录内部状态
- prop的赋值在外部世界使用组件时
- state的赋值在组件内部
- 组件不应该改变prop的值
- state存在的意义就是让组件发生改变
生命周期
三个过程:
- 装载过程(Mount)也就是把组件第一次在DOM树上渲染的过程
- 更新过程(Update)当组件被重新渲染的过程
- 卸载过程(Unmount)组件从DOM树上删除的过程
装载过程生命周期方法:
- constructor
- componentWillMount
在此方法内setState无效 - render
纯函数 并不往状态树上挂在DOM,只是返回一个JSX对象,React库根据返回对象决定如何渲染 - componentDidMount
可以再次方法内获取到任何组件内DOM节点,因为组件已经挂载完毕
更新过程生命周期方法:
- componentWillReceiveProps(nextProps)
通过setState方法出发更新不会调用此函数 - shouldComponentUpdate(nextProps,nextState)
最重要函数之一,必须有返回结果(boolean类型),可以通过定制此函数决定组件是否需要重新渲染,进而提升性能 - componentWillUpdate
不可以在此方法内setState,会造成死循环 - render
- componentDidUpdate
不可以在此方法内setState,会造成死循环 - componentDidCatch(err, info)
(v16新特性) componentDidCatch
this.forceUpdate();可以暴力的触发一次重新绘制(render)
卸载过程生命周期方法:
- componentWillUnmount
组件分类
- stateless: 无状态组件
- class: 类组件
- functional: 函数式组件
提高效率
脚手架 & tools
npm i create-react-app -g
npm i create-component-app
npm i styled-components --save