React | 生命周期

一、实际场景使用

挂载:

1、constructor

组件的构造函数,在组件创建时被调用

类组件

import React, { Component } from 'react';
class Example extends Component {
   state = {
        count: 0,
    };
    render() {
        return null;
    }
}

export default Example;

函数组件

import React, { useState } from 'react';

function Example() {
  const [count, setCount] = useState(0);
  return null;
}

export default Example;

2、componentDidMount

异步操作请求数据

类组件

import React, { Component } from 'react';

class Example extends Component {
  componentDidMount() {
    console.log('I am mounted!');
  }
  render() {
    return null;
  }
}

export default Example;

函数组件

import React, { useEffect } from 'react';

function Example() {
  // useEffect 第二个参数传入空数组
  useEffect(() => {
    console.log('I am mounte')
  }, [])
}
 
export default Example;

更新:

1、shouldComponentUpdate

决定组件是否需要重新渲染,优化组件性能

类组件

import React, { Component } from 'react';

class Example extends Component {
  state = {
    count: 0,
  };

  handleClick = () => {
    this.setState({ count: this.state.count + 1 });
  };

  shouldComponentUpdate(nextProps, nextState) {
    // 仅当 count 值发生变化时才重新渲染组件
    if (this.state.count !== nextState.count) {
      return true;
    }
    return false;
  }

  render() {
    console.log('Component re-rendered'); // 仅当 count 值变化时才输出
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={this.handleClick}>Increase Count</button>
      </div>
    );
  }
}

export default Example;

函数组件

import React, { useState } from 'react';

const MyComponent = React.memo(({ count }) => {
  console.log('Component rendered');

  return (
    <div>
      <p>Count: {count}</p>
    </div>
  );
});

function Example() {
  const [count, setCount] = useState(0);

  const handleClick = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <MyComponent count={count} />
      <button onClick={handleClick}>Increment</button>
    </div>
  );
}

export default Example;


2、componentDidUpdate

组件更新完成后调用,可进行DOM操作或处理更新后的状态数据

类组件

import React, { Component } from 'react';

class Example extends Component {
  constructor(props) {
    state = {
      count: 0,
      message: ''
    };
  }

  componentDidUpdate(prevProps, prevState) {
    if (this.state.count !== prevState.count ) {
      this.setState({ message: `Count updated from ${prevState.count} to ${this.state.count}` });
    }
  }

  handleIncrement = () => {
    this.setState(prevState => ({ count: prevState.count + 1 }));
  };

  render() {
    return (
      <div>
        <h1>Count: {this.state.count}</h1>
        <button onClick={this.handleIncrement}>Increment Count</button>
        <p>{this.state.message}</p>
      </div>
    );
  }
}
export default Example;

函数组件

// 在useEffect的回调函数中比较前后状态执行相应操作模拟

import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);
  const [prevCount, setPrevCount] = useState(0);

  useEffect(() => {
    // 在组件更新时执行的逻辑
    console.log('Component updated');

    // 比较前后状态
    if (count !== prevCount) {
      console.log(`Count changed from ${prevCount} to ${count}`);
      setPrevCount(count); // 更新 prevCount
    }
  }, [count, prevCount]); // 依赖项包括 count 和 prevCount

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

export default Example;


卸载:

1、componentWillUnmount

组件即将卸载时调用,处理定时器清除等操作

类组件

import React, { Component } from 'react';

class Example extends Component {
  componentWillUnmount() {
    console.log('I am Unmount!');
  }
  render() {
    return null;
  }
}

export default Example;

函数组件

import React, { useEffect } from 'react';

function Example() {
  useEffect(() => {
    // 清除函数,模拟 componentWillUnmount
    return () => {
      console.log('Component unmounted');
    };
  }, []); // 空依赖数组表示只在组件挂载和卸载时执行

  return <div>My Component</div>;
}

export default Example;

二、类组件粗归类

1、挂载

-constructor:组件的构造函数,在组件创建时被调用

-componentDidMount: 组件挂载完后,进行异步操作请求数据

2、更新

-static getDerivedStateFromProps: 静态方法,在组件接收新的props时调用,返回新的状态值。

-shouldComponentUpdate: 决定组件是否需要重新渲染的方法,可优化组件的性能。

-componentDidUpdate:组件更新完成后调用,可进行DOM操作或处理更新后的状态等。

3、卸载

-componentWillUnmount:组件即将卸载时调用,处理定时器清除等操作

4、小总结

之前写类组件时,就算是常用的,也经常记不住这个方法名。

开发过程中不以为然,可笔试时写不出觉得这分丢的太冤枉。

常用三个不可出岔子:componentDidMount、componentDidUpdate、componentWillUnmount


以上内容皆服务于: 今天只学一个知识点:hooks