组件生命周期:
命令式编程:jquery(自己寻找要操作的DOM元素,自己写要做的事情)
声明式编程:react(只需要在钩子函数中写东西即可,不需要执行钩子函数)
这些钩子函数是本身就会执行的,我们重写了一部分,是为了在这个组件的某个时期做一些事情。
生命周期流程:
1. 第一次初始化渲染显示: ReactDOM.render()
* constructor(): 创建对象初始化 state
* componentWillMount() : 将要插入回调
* render() : 用于插入虚拟 DOM 回调
* componentDidMount() : 已经插入回调
2. 每次更新 state: this.setSate()
* componentWillUpdate() : 将要更新回调
* render() : 更新(重新渲染)
* componentDidUpdate() : 已经更新回调
3. 移除组件: ReactDOM.unmountComponentAtNode(containerDom)
* componentWillUnmount() : 组件将要被移除回调
重要的勾子
1) render(): 初始化渲染或更新渲染调用
2) componentDidMount(): 开启监听, 发送 ajax 请求
3) componentWillUnmount(): 做一些收尾工作, 如: 清理定时器
4) componentWillReceiveProps(): 后面需要时讲
代码例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>work9</title> <script src="../js/react.development.js"></script> <script src="../js/react-dom.development.js"></script> <script src="../js/prop-types.js"></script> <script src="../js/babel.min.js"></script> <script type="text/babel"> class Life extends React.Component{ constructor(props){ super(props) //初始化状态 this.state={ opacity:1 } this.distroyComponent=this.distroyComponent.bind(this) } componentDidMount(){ //启动循环定时器 this.intervalId=setInterval(function () { console.log("定时器执行了") let {opacity}=this.state //这里的this,属于window opacity -= 0.1 if(opacity<=0){ //这里的减法有些误差,所以要小于等于0 opacity=1 } this.setState({opacity}) }.bind(this),200) } distroyComponent(){ ReactDOM.unmountComponentAtNode(document.getElementById("example")) } componentWillUnmount(){ //清理定时器 clearInterval(this.intervalId) } render(){ const {opacity}=this.state //下面style中:第一个大括号的作用说明里面开始了js代码,第二个大括号代表是style里面的对象; return( <div> <h2 style={{opacity:opacity}}>{this.props.msg}</h2> <button onClick={this.distroyComponent}>爱网球</button> </div> ) } } ReactDOM.render(<Life msg="iwantiwantiwantiwant"/>,document.getElementById("example")) </script> </head> <body> <div id="example"></div> </body> </html>