标签:勾子 tco text width 绑定 document code 流程 val
React 之 组件生命周期
理解
1) 组件对象从创建到死亡它会经历特定的生命周期阶段
2) React组件对象包含一系列的勾子函数(生命周期回调函数), 在生命周期特定时刻回调
3) 我们在定义组件时, 可以重写特定的生命周期回调函数, 做特定的工作
生命周期详述
1) 组件的三个生命周期状态:
* Mount:插入真实 DOM
* Update:被重新渲染
* Unmount:被移出真实 DOM
2) React 为每个状态都提供了勾子(hook)函数
* componentWillMount()
* componentDidMount()
* componentWillUpdate()
* componentDidUpdate()
* componentWillUnmount()
3) 生命周期流程:
a. 第一次初始化渲染显示: ReactDOM.render()
* constructor(): 创建对象初始化state
* componentWillMount() : 将要插入回调
* render() : 用于插入虚拟DOM回调
* componentDidMount() : 已经插入回调
b. 每次更新state: this.setSate()
* componentWillUpdate() : 将要更新回调
* render() : 更新(重新渲染)
* componentDidUpdate() : 已经更新回调
c. 移除组件: ReactDOM.unmountComponentAtNode(containerDom)
* componentWillUnmount() : 组件将要被移除回调
重要的勾子
1) render(): 初始化渲染或更新渲染调用
2) componentDidMount(): 开启监听, 发送ajax请求
3) componentWillUnmount(): 做一些收尾工作, 如: 清理定时器
4) componentWillReceiveProps(): 该方法当props发生变化时执行
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../js/react.development.js"></script> <script type="text/javascript" src="../js/react-dom.development.js"></script> <script type="text/javascript" src="../js/prop-types.js"></script> <script type="text/javascript" src="../js/babel.min.js"></script> </head> <body> <div id="example"></div> <script type="text/babel"> /* 需求: 自定义组件 1. 让指定的文本做显示/隐藏的动画 2. 切换时间为2S 3. 点击按钮从界面中移除组件界面 */ class Life extends React.Component{ constructor(props){ super(props) //初始化状态 this.state={ opacity: 1 } this.distroyComponent = this.distroyComponent.bind(this) } distroyComponent(){ ReactDOM.unmountComponentAtNode(document.getElementById(‘example‘)) } componentDidMount(){// 在此方法中启动定时器/绑定监听/发送ajax请求 //循环定时器 this.intervalId = setInterval(function(){ //setInterval的this 是windows console.log(‘定时器执行。。。‘) let {opacity} = this.state opacity -= 0.1 if(opacity<=0){ opacity=1 } this.setState({opacity}) }.bind(this),200) } componentWillUnmount(){// 清除定时器/解除监听 console.log(‘componentWillUnmount(): 将要被移除‘) clearInterval(this.intervalId) } render(){ const {opacity} = this.state return ( <div> <h2 style={{opacity}}>{this.props.msg}</h2> <button onClick={this.distroyComponent}>不活了</button> </div> ) } } //渲染应用组件标签 ReactDOM.render(<Life msg="React 太难了!"/>,document.getElementById(‘example‘)) </script> </body> </html>
标签:勾子 tco text width 绑定 document code 流程 val
原文地址:https://www.cnblogs.com/jnba/p/12527151.html