首页 > 其他分享 >Reack hooks useEffect 总结

Reack hooks useEffect 总结

时间:2022-11-30 20:22:22浏览次数:36  
标签:回调 函数 hooks Reack 依赖 组件 useEffect name

useEffect 总结

特性

  • 参数必须是一个回调函数与一个数组
  • 组件首次加载会执行一次useEffect的回调,之后依赖的值更新则会执行useEffect中的回调。
  • 如果第二个参数是一个空数组则意味着=>空数组不依赖任何东西,所以只会执行一次类似类组件中的componentDidMounted
  • 可以使用多次
  • 可以返回一个回调函数
    • 如果无依赖 useEffect返回的函数 执行时机是组件被销毁时会触发
    • 如果有依赖 当依赖发生改变时会执行该useEffect返回的函数
举个栗子
import React, { useEffect, useState } from 'react'

export default function App() {
  const [name, setName] = useState('bingquan')
  useEffect(()=> {
    setName(`${name.slice(0, 1).toUpperCase()}${name.slice(1, name.length)}`); // 首次触发该回调,将name的状态同步最新,然后重新渲染App组件,其次当外界改变最新状态则又会进入该回调,从而保证最新的状态
  }, [name]) // 第一次执行一次,之后name(依赖)更新也会执行
  return (
    <div>
      App-{name}
      <button onClick={()=> {
        setName('tianhui')
      }}>click</button>
    </div>
  )
}

特殊的用法

  • 由于React17之后使用了hook导致函数组件没有生命周期,导致无法实现一些特殊的需求,例如当组件销毁后我们需要关闭组件的定时器,和一些任务,我们第一时间想到的肯定是使用类组件中的生命周期componentWillUnmount,但函数组件中却没有生命周期,所以我们可以利用useEffect回调函数返回出一个回调函数,这时当组件销毁时会执行该返回出的回调
举个例子
/*
 * @Author: HuangBingQuan [email protected]
 * @Date: 2022-11-27 21:02:08
 * @LastEditors: HuangBingQuan [email protected]
 * @LastEditTime: 2022-11-30 18:25:10
 * @FilePath: /react_test/src/02-advanced/19-生命周期-销毁.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import React, { Component, useEffect, useState } from 'react'


export default function App() {
  const [isCreated, setIsCreated] = useState(true)
  return (
    <div>
      <button onClick={()=> {
        setIsCreated(!isCreated)
      }}>click</button>
      { isCreated && <Child></Child>}
    </div>
  )
}

const Child = ()=> {
  useEffect(()=> {
    let timer = setInterval(()=> {
      console.log(10);
    }, 1000)
    window.onresize = (e)=> {
      console.log(e);
    }
    return ()=> { // 如果无依赖 useEffect返回的函数 执行时机是组件被销毁时会触发 如果有依赖 当依赖发生改变时会执行该useEffect返回的函数
      console.log('组件销毁了');
      clearInterval(timer);
      window.onresize = null;
    }
  }, [])
  return (
    <div>Child</div>
  )
}

标签:回调,函数,hooks,Reack,依赖,组件,useEffect,name
From: https://www.cnblogs.com/bingquan1/p/16939615.html

相关文章

  • pytest + yaml 框架 -6.hooks 钩子功能实现
    前言在发送请求的时候,我们希望在发送请求参数前,带上签名的值,或者返回的内容需要二次处理,解密后返回。此功能我们可以用hooks钩子来实现pip安装插件pipinstallpyte......
  • 如何正确搭配使用 useEffect 与 setInterval
    先说一下useEffect的return回调,会在当前useEffect执行完毕后return一次。这是effect可选的清除机制。每个effect都可以返回一个清除函数。背景useEffect看似很简单,其......
  • React-useEffect轮播
    第零步:导入importReact,{useState,useEffect}from"react"第一步:创建函数组件:exportdefaultfunctionBanner(){第二步:改变状态:const[n,setN]=useState(0)/......
  • React-hooks+TypeScript最佳实战
    ReactHooks什么是HooksReact一直都提倡使用函数组件,但是有时候需要使用state或者其他一些功能时,只能使用类组件,因为函数组件没有实例,没有生命周期函数,只有类组件才......
  • React-hooks面试考察知识点汇总
    Hook简介Hook出世之前React存在的问题在组件之间复用状态逻辑很难React没有提供将可复用性行为“附加”到组件的途径(例如,把组件连接到store)。有一些解决此类问题的......
  • React-Hooks怎样封装防抖和节流-面试真题
    Debouncedebounce原意消除抖动,对于事件触发频繁的场景,只有最后由程序控制的事件是有效的。防抖函数,我们需要做的是在一件事触发的时候设置一个定时器使事件延迟发生,在......
  • 几种常见的React Hooks
    useStateuseState,让函数组件拥有了维持状态的功能。维持状态是指在函数的多次渲染之间,这个state是可以在函数中间共享的使用方式importReact,{useState}from'reac......
  • 深度探讨react-hooks实现原理
    reacthooks实现Hooks解决了什么问题在React的设计哲学中,简单的来说可以用下面这条公式来表示:UI=f(data)等号的左边时UI代表的最终画出来的界面;等号的右边是......
  • react hooks echart自适应解决方案
    //index.tsximportReact,{useEffect,useRef,useState}from"react";import*asechartsfrom"echarts";importuseEchartResizerfrom"./useEchartResizer";......
  • reactHooks_useEffect
    当在直接在组件内使用setState时,会产生“渲染次数过多”的错误例如:constA=()=>{  const[num,setNum]=useState(1);  setNum(1);  return(<>{num}</>)......