React
2019-07-02 本文已影响0人
前端客
React优点
- 组件化
将一个应用拆分为组件的形式再进行组合,而对于每个组件来说,将应用状态和DOM进行拆分,最终提高了项目的后期可维护性。- 虚拟DOM
虚拟DOM的出现,使react不需要每次状态改变都去访问DOM。而是生成新的虚拟DOM,和之前的虚拟DOM 进行对比,然后将改变的部分进行渲染。降低了访问DOM的成本,使其具有高性能。
React缺点
- 虚拟DOM。这是react的优势也是有很大缺点的。首先,每次小小状态改变都要去生成新的虚拟DOM,如果这个虚拟DOM的结构复杂无疑带来很多开销。其次,我们需要改变一个子组件的数据,但数据来于父级。这时候,子组件的兄弟组件都会被重新执行render,生成虚拟DOM。还有,在做列表的时候,都必须加上key 来提高性能。react本身并不能很好的处理这些问题,必须我们人为的通过添加key,通过shouldComponentUpdate方法比较,immutable等方法去提升性能。
- 视图层。只使用react本身是不能构建一个合格的应用的,必须结合周边各种库的辅助。
Props & State
react-lifecycle.png
- 子组件和父组件之间可以通过Props进行数据的传递。
- State表示组件的当前状态,通过改变state进行页面的重新渲染。
- 兄弟组件之间,通过状态提升,把子组件的state数据提升至其共同的父组件当中保存。之后父组件可以通过props将状态数据传递到子组件当中,实现通信。
组件实例化创建
- getDefaultProps
作用于组件类,设置默认的props,只调用一次。es6中使用静态属性static defaultProps表示。- getInitialState
实例创建时调用一次,设置默认state。es6中可以在constructor中设置this.state表示。- componentWillMount
组件渲染前调用,这里可以修改state值,而不会再次触发render。- render
根据props和state创建虚拟DOM。- componentDidMount
渲染结束后调用,修改state将被渲染。可以通过findDOMNode去获取修改DOM。服务器端无法使用componentDidMount。
组件更新
- componentWillReceivePorps(nextProps)
属性改变时调用,nextProps为更新后的props,这里容易混淆。- shouldComponentUpdate(nextProps, nextState)
nextProps,nextState分别为更新后的属性和状态。通常我们在这里判断属性和状态是否改变,是否需要重新渲染。如果返回true将渲染,false不会。- componentWillUpdate(nextProps, nextState)
组件更新渲染前调用,可以设置state。
- componentDidUpdate()
组件渲染后调用,修改state将被渲染。可以通过findDOMNode去获取修改DOM。
组件卸载
- componentWillUnmount
组件将被卸载时调用,一般用来清除事件监听和定时器。