任何生命体都会经历从出生到消亡的过程,React Native框架中的组件同样具有这样的属性。在组件生命周期的每个阶段,React Native提供了多个生命周期函数,供开发者作为切入组件的钩子(hook),这样在对应的时间点程序就可以做对应的逻辑处理,从而实现相应的功能。
在React Native程序启动时,内部的虚拟DOM开始建立,生命周期就是建立在此虚拟DOM的整个生命周期之中,从虚拟DOM的初始化到虚拟DOM的卸载,React Native为组件的不同状态建立了不同的生命周期。
在图3-4中,可以看到在React Native虚拟DOM的几个大的阶段中,都存在对应的生命周期函数。下面就分阶段介绍。
图3-4 React Native中的生命周期
此阶段设定组件props和state的默认值,可通过如下代码赋值:
1. static defaultProps = { 2. autoPlay: false, 3. maxLoop: 10, 4. };
此阶段为组件开始实例化的阶段,比如当该组件被其他组件调用的时候。主要包含以下三个函数:
当用户操作或者父组件有更新并且组件由于props或state的变更导致组件需要重新渲染时,会经历此阶段。而在更新渲染的几个重要时机,React Native提供了如下的生命周期函数供开发者执行对应的逻辑操作:
至此,React Native一个组件的完整生命周期执行完毕,你可以通过下面的代码体会React Native每个阶段的执行过程。实际开发时只需要根据项目需求在对应的生命周期函数中添加上自己的业务逻辑即可。
1. /** 2. * 章节: 03-06 3. * React Native 中的生命周期 4. * FilePath: /03-06/lifecycle.js 5. * @Parry 6. */ 7. 8. import React, { Component } from 'react'; 9. import { AppRegistry,View,Text } from 'react-native'; 10. 11. export default class LifeCycle extends Component { 12. 13. constructor(props) { 14. super(props); 15. this.state = { 16. name: "React" 17. } 18. } 19. 20. //组件即将加载 21. componentWillMount() { 22. console.log("componentWillMount"); 23. } 24. 25. //开始组件渲染 26. render() { 27. console.log("render"); 28. return ( 29. <View> 30. <Text> 31. {this.state.name} 32. </Text> 33. </View> 34. ); 35. } 36. 37. //组件加载完毕后 38. componentDidMount() { 39. console.log("componentDidMount"); 40. } 41. 42. //组件接收到新的 props 43. componentWillReceiveProps(nextProps) { 44. console.log("componentWillReceiveProps"); 45. } 46. 47. //逻辑控制是否需要更新组件 48. shouldComponentUpdate(nextProps, nextState) { 49. console.log("shouldComponentUpdate"); 50. } 51. 52. //组件即将更新重新渲染 53. componentWillUpdate(nextProps, nextState) { 54. console.log("componentWillUpdate"); 55. } 56. 57. //组件重新渲染后 58. componentDidUpdate(prevProps, prevState) { 59. console.log("componentDidUpdate"); 60. } 61. 62. //组件卸载注销前 63. componentWillUnmount() { 64. console.log("componentWillUnmount"); 65. } 66. } 67. 68. AppRegistry.registerComponent('LifeCycle', () => Main);