import React from 'react' class Test extends React.Component { // 如果数据是组件的状态需要去影响视图,数据定义到 state 中 // 而如果数据不和视图绑定,那就定义一个普通的实例属性 // state 中尽量保持精简 // 设置一个定时器 timer = null // 实例属性 componentDidMount () { this.timer = setInterval (() => { console.log('定时器开启') }, 1000) } // 组件的卸载阶段 // componentWillUnmount 是组件卸载,作用:执行清理工作(比如:清理定时器) componentWillUnmount () { console.log('componentWillUnmount') // 清理定时器 clearInterval(this.timer) } render () { return (
this is Test
) } } class App extends React.Component { // constructor 是创建组件时,最先执行,初始化的时候只执行一次 // 作用:1.初始化 state 2.创建 ref 3.使用 bind 解决 this 指向问题等 constructor () { super() console.log('constructor') } state = { count: 0, flag: true } clickHandler = () => { this.setState ({ count: this.state.count + 1, flag: !this.state.flag }) } // componentDidMount 是组件挂载(渲染 DOM 渲染)后执行,初始化的时候执行一次 (类似 vue 中的 mounted) // 作用:1.发送网络请求 2.DOM 操作 componentDidMount () { console.log('componentDidMount') } // 组件的更新阶段 // componentDidUpdate 是组件更新后(DOM 渲染完毕) // 作用:DOM 操作,可以获取到更新后的 DOM 内容,不要直接调用 setState componentDidUpdate() { console.log('componentDidUpdate') } // render 是每次组件渲染都会触发 // 作用:渲染 UI (注意,不能在里面调用 setState() ) render () { console.log('render') return (
this is div {/* 通过一个数据状态的切换,让 Test 组件进行销毁重建,就会发生组件卸载 */} {this.state.flag ? : null}
) } } export default App