首页 > 其他分享 >react 生命周期

react 生命周期

时间:2024-04-08 21:44:07浏览次数:17  
标签:count 生命周期 console log componentDidMount react componentDidUpdate useEffect

1.class组件

初次挂载 1.constructor 2.getDerivedStateFromProps 3.render 4.componentDidMount   更新数据 1.getDerivedStateFromProps 2.shouldComponentUpdate 3.render 4.componentDidUpdate

备注: 1.PureComponent里不能写shouldComponentUpdate 2.优化性能一般在shouldComponentUpdate

2.函数组件

函数组件并没有专门的生命周期api

useEffect将在执行 DOM 更新之后调用它 1.不传第二个参数相当于 componentDidMount 和 componentDidUpdate 2.第二个参数[],里面没有值表示只在初始化时执行一次相当于componentDidMount 3.第二个参数有值表示只有当count变化时,我们才去再次执行 useEffect.相当于watch  
import styles from './index.less';
import { Button } from 'antd';
// import React from 'react';
import React, { useState, useEffect } from 'react';

const HomePage: React.FC = () => {
  class Cc extends React.Component {
    constructor(props: any) {
      super(props)
      console.log('constructor')
      this.state = {
        a: 1
      }
    }
    static getDerivedStateFromProps(props: any, state: any) {
      console.log('getDerivedStateFromProps')
      // console.log(props)
      // console.log(state)
      return null;
    }
    // 更新阶段
    // PureComponent里不能写shouldComponentUpdate
    // 优化生成周期
    shouldComponentUpdate() {
      console.log('shouldComponentUpdate')
      return true;
    }
    render() {
      console.log('render')
      return <div>
        <h3>class组件</h3>
        <div>初次挂载</div>
        <div>1.constructor</div>
        <div>2.getDerivedStateFromProps</div>
        <div>3.render</div>
        <div>4.componentDidMount</div>
        <Button type="primary" size="small" onClick={() => {
          console.log('修改数据')
          this.setState({
            a: 2
          })
        }}>修改数据</Button>
        <div>更新数据</div>
        <div>1.getDerivedStateFromProps</div>
        <div>2.shouldComponentUpdate</div>
        <div>3.render</div>
        <div>4.componentDidUpdate</div>
      </div>
    }
    // 组件挂载完成
    componentDidMount() {
      console.log('componentDidMount')
    }
    componentDidUpdate() {
      console.log('componentDidUpdate')
    }
  }
  const [count, setCount] = useState(0);

 
  // useEffect将在执行 DOM 更新之后调用它。
  // 1.不传第二个参数相当于 componentDidMount 和 componentDidUpdate
  // 2.第二个参数[],里面没有值表示只在初始化时执行一次相当于componentDidMount
  // 3.第二个参数有值表示只有当count变化时,我们才去再次执行 useEffect.相当于watch
  useEffect(() => {
    // 使用浏览器的 API 更新页面标题
    document.title = `You clicked ${count} times`;
  }, [count]);
  return (
    <div className={styles.container}>
      <h2>生命周期</h2>
      <h3>函数组件</h3>
      <div>函数组件并没有专门的生命周期api</div>
      <p>You clicked {count} times</p>
      <Button type="primary" size="small" onClick={() => setCount(count + 1)}>
        Click me
      </Button>
      <div>useEffect将在执行 DOM 更新之后调用它</div>
      <div>1.不传第二个参数相当于 componentDidMount 和 componentDidUpdate</div>
      <div>2.第二个参数[],里面没有值表示只在初始化时执行一次相当于componentDidMount</div>
      <div>3.第二个参数有值表示只有当count变化时,我们才去再次执行 useEffect.相当于watch</div>
      <Cc></Cc>
    </div>
  );
};



export default HomePage;

 

标签:count,生命周期,console,log,componentDidMount,react,componentDidUpdate,useEffect
From: https://www.cnblogs.com/ssszjh/p/18122682

相关文章

  • react中redux基本使用二
    1.action传参,用payload属性接收  <buttononClick={()=>dispatch(addNum(2))}>+2</button> 2.redux中异步操作,与同步类似,需要比同步多封装一个函数//使用RTK创建store,createSlice创建reducer的切片//使用RTK创建store,createSlice创建reducer的切片import......
  • react中redux基本使用
    1.安装 npminstall@reduxjs/toolkitreact-redux2.创建store目录 3.创建counterStore.js//使用RTK创建store,createSlice创建reducer的切片import{createSlice}from"@reduxjs/toolkit";constcounterSlice=createSlice({//需要一个配置对象作为参数,通过......
  • [React] Using key prop to reset component to avoid useEffect hook
    ThecomponentusinguseEffectwhichisnotnecessary:functionTopicEditor({selectedTopicId}){const[enteredNote,setEnteredNote]=useState('');constselectedTopic=DUMMY_TOPICS.find(topic=>topic.id===selectedTopicId)......
  • 全栈的自我修养 ———— react路由两种传参方法
    react路由传参1、传统传参跳转前:跳转后:结果:2、配置传参跳转前:配置routes:跳转后:结果:1、传统传参跳转前:import{useNavigate}from"react-router-dom";<divclassName='login'onClick={()=>navigator('/public/login?id=1')}> <div......
  • 全栈的自我修养 ———— react router6默认二级路由配置?嵌套时候如何实现默认导航
    在组件嵌套时候小编定义了一个共同组件于/public地址下,小编发现如果直接访问public是只有外部组件的页面,小编目标是访问public时候直接访问index页面,小编找了很多资料最终自己使出来了一个办法如下!!小编自己发现的后来查找到的小编自己发现的即把{pat......
  • 全栈的自我修养 ———— react未知地址默认导航至404页面
    方法1在根目录上添加一个errorElement{path:'/',element:<Navigateto="/public/index"replace/>,errorElement:<div>errorPage</div>},方法2{path:'*',element:<div>errorPage</di......
  • React中的Hooks---useEffect
    简介什么是ReactHooksReactHooks是在React16.8版本中引入的一项重大特性,旨在解决函数组件在复杂场景下的状态管理和生命周期问题。它们允许在不编写类组件的情况下使用state、生命周期方法等功能,使得函数组件更加简洁、易于理解和复用。作为ReactHooks的核心成员之一,useEf......
  • 前端【VUE】04-vue【生命周期】
    生命周期①Vue生命周期和生命周期的四个阶段 ②Vue生命周期函数(钩子函数)1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metahttp-equiv="X-UA-Compatible"content="IE=edge"&......
  • React爬坑秘籍(一)——提升渲染性能
    React爬坑秘籍(一)——提升渲染性能前言来到腾讯实习后,有幸八月份开始了腾讯办公助手PC端的开发。因为办公助手主推的是移动端,所以导师也是大胆的让我们实习生来技术选型并开发,他来做codereview。之前也学习过React,当然也是非常合适这一次的开发。我会梳理这一个月来,自己对架构......
  • vue2生命周期及在不同生命周期做哪些事情
    Vue的生命周期就是vue实例从创建到销毁的全过程,也就是newVue()开始就是vue生命周期的开始。Vue实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom->渲染、更新->渲染、卸载等⼀系列过程,称这是Vue的⽣命周期。钩子函数是Vue生命周期中每个阶段......