与React 组件一样,Rx组件同样具备以下生命周期
初始化: constructor:构造函数
componentWillMount
:该函数会在render
函数前被执行,且一般只会执行一次。render
:不要在render中调用setState避免循环调用导致堆栈溢出。
componentDidMount
:这个方法会在组件加载完毕之后立即执行。在这个时候之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。如果你想和其他JavaScript框架一起使用,可以在这个方法中执行setTimeout, setInterval或者发送AJAX请求等操作(防止异部操作阻塞UI)。
componentWillReceiveProps
:在组件接收到一个新的prop(或者更新)时被执行。这个方法在初始化render时不会被调用。如果你需要考虑性能,特别是在有上百个组件时,可以使用shouldComponentUpdate来提升应用速度。
shouldComponentUpdate
:返回布尔值,决定组件是否更新。默认为true
。
componentWillUpdate
:在组件接收到新的props或者state但还没有render时被执行。在初始化时不会被执行。
componentDidUpdate
:在组件完成更新后立即执行。在初始化时不会被执行。一般会在组件完成更新后被使用。例如清除notification文字等操作。
componentWillUnmount
:主要用来执行一些必要的清理任务。例如清除setTimeout等函数,或者任意的在componentDidMount创建的DOM元素。
具体的例子如下
import {createElement, Component, render} from 'rax'; import { View, Text, Button} from 'nuke'; class Demo extends Component { constructor(props) { super(props); this.state = { data: 0 } }; render() { return ( <View> <Button onPress = {this.setNewNumber}>点击增加</Button> <Text>{this.state.data}</Text> </View> ); } setNewNumber = ()=> { this.setState({ data: this.state.data + 1 }) } componentWillMount() { console.log('Component WILL MOUNT!') } componentDidMount() { console.log('Component DID MOUNT!') } componentWillReceiveProps(newProps) { console.log('Component WILL RECIEVE PROPS!') } shouldComponentUpdate(newProps, newState) { return true; } componentWillUpdate(nextProps, nextState) { console.log('Component WILL UPDATE!'); } componentDidUpdate(prevProps, prevState) { console.log('Component DID UPDATE!') } componentWillUnmount() { console.log('Component WILL UNMOUNT!') } } render(<Demo />); export default Demo;