react.js 从零开始(二)组件的生命周期
2015-08-30 16:58
1021 查看
什么是生命周期?
组件本质上是一个状态机,输入确定,输出一定确定。
当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应。。
一个组件的生命周期可以概括为
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/02/ba7c35b83df373c7719d3e01a7dcc96c.png)
初始化:状态下 可以自定义的函数
在组件类创建的时候调用一次,然后返回值被缓存下来。如果父组件没有指定 props 中的某个键,则此处返回的对象中的相应属性将会合并到
该方法在任何实例创建之前调用,因此不能依赖于
在组件挂载之前调用一次。返回值将会作为
服务器端和客户端都只调用一次,在初始化渲染执行之前立刻调用。如果在这个方法内调用
在初始化渲染执行之后立刻调用一次,仅客户端有效(服务器端不会调用)。在生命周期中的这个时间点,组件拥有一个 DOM 展现,你可以通过
如果想和其它 JavaScript 框架集成,使用
运行中:状态下 可以自定义的函数
在组件接收到新的 props 的时候调用。在初始化渲染的时候,该方法不会调用。
用此函数可以作为 react 在 prop 传入之后,
[/code]
在接收到新的 props 或者 state,将要渲染之前调用。该方法在初始化渲染的时候不会调用,在使用
如果确定新的 props 和 state 不会导致组件更新,则此处应该
如果
默认情况下,
如果性能是个瓶颈,尤其是有几十个甚至上百个组件的时候,使用
在接收到新的 props 或者 state 之前立刻调用。在初始化渲染的时候该方法不会被调用。
使用该方法做一些更新之前的准备工作。
在组件的更新已经同步到 DOM 中之后立刻被调用。该方法不会在初始化渲染的时候调用。
使用该方法可以在组件更新之后操作 DOM 元素。
销毁:状态下 可以自定义的函数
在组件从 DOM 中移除的时候立刻被调用。
在该方法中执行任何必要的清理,比如无效的定时器,或者清除在
总结:组件的生命周期下可以自定义的函数大致有这些了。。我们下期再见
组件本质上是一个状态机,输入确定,输出一定确定。
当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应。。
一个组件的生命周期可以概括为
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/02/ba7c35b83df373c7719d3e01a7dcc96c.png)
初始化:状态下 可以自定义的函数
getDefaultProps
object getDefaultProps()
在组件类创建的时候调用一次,然后返回值被缓存下来。如果父组件没有指定 props 中的某个键,则此处返回的对象中的相应属性将会合并到
this.props(使用
in检测属性)。
该方法在任何实例创建之前调用,因此不能依赖于
this.props。另外,
getDefaultProps()返回的任何复杂对象将会在实例间共享,而不是每个实例拥有一份拷贝。
getInitialState
object getInitialState()
在组件挂载之前调用一次。返回值将会作为
this.state的初始值。
componentWillMount
componentWillMount()
服务器端和客户端都只调用一次,在初始化渲染执行之前立刻调用。如果在这个方法内调用
setState,
render()将会感知到更新后的 state,将会执行仅一次,尽管 state 改变了。
componentDidMount
componentDidMount()
在初始化渲染执行之后立刻调用一次,仅客户端有效(服务器端不会调用)。在生命周期中的这个时间点,组件拥有一个 DOM 展现,你可以通过
this.getDOMNode()来获取相应 DOM 节点。
如果想和其它 JavaScript 框架集成,使用
setTimeout或者
setInterval来设置定时器,或者发送 AJAX 请求,可以在该方法中执行这些操作。
运行中:状态下 可以自定义的函数
componentWillReceiveProps
componentWillReceiveProps(object nextProps)
在组件接收到新的 props 的时候调用。在初始化渲染的时候,该方法不会调用。
用此函数可以作为 react 在 prop 传入之后,
render()渲染之前更新 state 的机会。老的 props 可以通过
this.props获取到。在该函数中调用
this.setState()将不会引起第二次渲染。
componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount }); }
[/code]
shouldComponentUpdate
boolean shouldComponentUpdate(object nextProps, object nextState)
在接收到新的 props 或者 state,将要渲染之前调用。该方法在初始化渲染的时候不会调用,在使用
forceUpdate方法的时候也不会。
如果确定新的 props 和 state 不会导致组件更新,则此处应该
返回 false。
shouldComponentUpdate: function(nextProps, nextState) { return nextProps.id !== this.props.id; }
如果
shouldComponentUpdate返回 false,则
render()将不会执行,直到下一次 state 改变。(另外,
componentWillUpdate和
componentDidUpdate也不会被调用。)
默认情况下,
shouldComponentUpdate总会返回 true,在
state改变的时候避免细微的 bug,但是如果总是小心地把
state当做不可变的,在
render()中只从
props和
state读取值,此时你可以覆盖
shouldComponentUpdate方法,实现新老 props 和 state 的比对逻辑。
如果性能是个瓶颈,尤其是有几十个甚至上百个组件的时候,使用
shouldComponentUpdate可以提升应用的性能。
componentWillUpdate
componentWillUpdate(object nextProps, object nextState)
在接收到新的 props 或者 state 之前立刻调用。在初始化渲染的时候该方法不会被调用。
使用该方法做一些更新之前的准备工作。
componentDidUpdate
componentDidUpdate(object prevProps, object prevState)
在组件的更新已经同步到 DOM 中之后立刻被调用。该方法不会在初始化渲染的时候调用。
使用该方法可以在组件更新之后操作 DOM 元素。
销毁:状态下 可以自定义的函数
componentWillUnmount
componentWillUnmount()
在组件从 DOM 中移除的时候立刻被调用。
在该方法中执行任何必要的清理,比如无效的定时器,或者清除在
componentDidMount中创建的 DOM 元素。
总结:组件的生命周期下可以自定义的函数大致有这些了。。我们下期再见
相关文章推荐
- react.js 从零开始(一)
- React学习笔记(7)---动画效果实现
- React学习笔记(6)---组件协同使用介绍
- ReactiveCocoa信号使用方法
- React学习笔记(5)--事件
- React 实践记录 02 Flux introduction
- React组件开发入门
- Facebook React Native 中文教程一:介绍
- ReactiveCocoa Documents 翻译(基于版本V2.5)
- java设计模式-reactor模式
- React 实践记录 01 组件开发入门
- ReactiveCocoa2 源码浅析
- [React] React Fundamentals: Precompile JSX
- React学习笔记(4)---react属性与状态
- React学习笔记(3)-- JSX语法及特点介绍
- react学习笔记(2)---组件的生命周期
- Reactivecocoa-publish、multicast、replay、replayLast
- react-native试玩(4)-新建项目
- React Native常用组件
- React学习笔记(1)--第一个程序