react学习笔记【2】

53 阅读1分钟

react的生命周期

挂载->更新->卸载

msedge_swn4tqpGD9.png

不常用生命周期

msedge_ZDKJ2FJa9U.png

生命周期挂载阶段

MindManager_xfMX1v7QWL.png

生命周期更新阶段

MindManager_i9a7cSqVnQ.png

生命周期卸载阶段

MindManager_Yx3HkawzaI.png

实操

clock文件夹里面的index.js

import React, { Component } from 'react'

export default class index extends Component {
    constructor(){
        super() 
        console.log('构造器');
        this.state = {
            // 定义内部状态数据
            date:new Date()
        }
    }
  render() {
    console.log('渲染');
    return (
      <div>
        <h2>电子时钟</h2>
        <p>时间{this.state.date.toLocaleTimeString()}</p>
      </div>
    )
  }
  componentDidMount(){
    console.log('挂载完成');
  }
}

app.js

import Clock from "./components/Clock"
<Clock />

页面效果与控制台输出

msedge_GetefzRyro.png

msedge_eDXPosU2gQ.png

clock文件夹里面的index.js(更新)

import React, { Component } from 'react'

export default class index extends Component {
    constructor(){
        super() 
        console.log('构造器');
        this.state = {
            // 定义内部状态数据
            date:new Date()
        }
    }
  render() {
    console.log('渲染');
    return (
      <div>
        <h2>电子时钟</h2>
        <p>时间{this.state.date.toLocaleTimeString()}</p>
      </div>
    )
  }

  componentDidMount(){
    console.log('挂载完成');
    // 在挂载完成后立刻执行
    this.onTick()
  }
  componentDidUpdate(){
    console.log('更新生命周期');
  }
  onTick(){
    // 启动定时器
    setInterval(()=>{
      // 每秒获取当前时间并通过setState设置给内部状态
      this.setState({date:new Date()})
    },1000)
  }
}

页面效果与控制台输出(更新)

控制台会循环输出:渲染->更新生命周期

电子时钟动画.gif 控制台会循环输出:渲染->更新生命周期

卸载生命周期

import Todolist from "./components/todolist"
import Clock from "./components/Clock"
import React from "react";
// 引入首字母要大写
class App extends React.Component{
  state={
		isOpen:true
	}
	render () {
		return (
			<div>
        <h2>这是react脚手架创建项目</h2>
        <Todolist />
				{/* 生命周期 */}
				{this.state.isOpen?<Clock/>:''}
				
				<button type="button" onClick={()=>{this.setState({isOpen:false})}}>关闭时钟</button>
			</div>
		)
	}
}
// 把组件暴露出去
export default App;

启动定时器

 onTick(){
    // 启动定时器
    this.timer = setInterval(()=>{
      // 每秒获取当前时间并通过setState设置给内部状态
      this.setState({date:new Date()})
    },1000)
  }

清除定时器

componentWillUnmount(){
    console.log('卸载生命周期');
        // 清除定时器
    clearInterval(this.timer)
  }