首页 > 其他分享 >useEffect useCallback 和 useMemo

useEffect useCallback 和 useMemo

时间:2023-06-19 16:26:20浏览次数:44  
标签:const 渲染 useMemo useCallback 组件 useEffect

useEffect

useEffect可以帮助我们在DOM更新完成后执行某些副作用操作,如数据获取,设置订阅以及手动更改 React 组件中的 DOM 等

有了useEffect,我们可以在函数组件中实现 像类组件中的生命周期那样某个阶段做某件事情,具有:

componentDidMount

componentDidUpdate

componentWillUnmount

基本用法

useEffect(() => { console.log('这是一个不含依赖数组的useEffect,每次render都会执行!') })

useEffect 规则

没有传第二个参数时,在每次 render 之后都会执行 useEffect中的内容

useEffect接受第二个参数来控制跳过执行,下次 render 后如果指定的值没有变化就不会执行

useEffect 是在 render 之后浏览器已经渲染结束才执行(什么时候会重新渲染呢?在组件初始化的时候,还有就是在和组件绑定的数据发生变化的时候会重新渲染)

useEffect 的第二个参数是可选的,类型是一个数组(数组中的值变化会出发副作用,相当于vue的watch)

根据第二个参数的不同情况,useEffect具有不同作用(不传参数就相当于componentDidMount,只会在初始化的时候执行一次)

useCallback 和 useMemo

都是属于组件性能优化的手段,用来缓存一些复杂的计算结果(useMemo返回值,不经常改变的)和 缓存一些父组件传给子组件的内容,避免父组件每次更新都要重新渲染子组件。

useMemo返回的的是一个值,用于避免在每次渲染时都进行高开销的计算。例:

// 仅当num改变时才重新计算结果

const result = useMemo(() => {
    for (let i = 0; i < 100000; i++) {
      (num * Math.pow(2, 15)) / 9;
    }
}, [num]);

useCallback 和 useMemo 的区别是useCallback返回一个函数,当把它返回的这个函数作为子组件使用时,可以避免每次父组件更新时都重新渲染这个子组件,

const App = ({val}) => {
    const [count, setCount] = useState(0)
  const onClick = useCallback(() => {
    // ...
  }, [])
  const data = useMemo(() => val, [val])
  return (
    <>
      <button onClick={() => setCount(count+1)}>点我</button>
      <OtherComp onClick={onClick} data={data} />
    </>
  )
}

提示:当我们不知道是否该使用useCallback 和 useMemo 的时候最好不用使用,因为它在初始化渲染的时候,需要保留上次的值,和最新的值对比...首次的开销是比较大的。不然react在设计的时候直接把它包裹在组件中了。useEffect虽然可能会渲染很多次但是在vDom还是很快的。

标签:const,渲染,useMemo,useCallback,组件,useEffect
From: https://www.cnblogs.com/ximenchuifa/p/17491413.html

相关文章

  • useEffect的的用法
    useEffect主要两个用途,一个是执行组件初次渲染时执行的函数,另一个是监听变化时执行相关函数;语法是useEffect(setup,dependencies?)setup是要执行的函数,dependencies是要监听的对象,可以是组件中定义的属性、状态、变量、方法,当没有dependencies时,该钩子只在组件初次渲染时执行对......
  • [React] useEffect
    purefunction:单纯返回jsx元素的组件在使用react函数组件时,理论上函数组件只会进行不改变内部状态值的计算,以及返回html代码。一个pure函数就是如此,例如一个函数组件接受一个id作为传入属性,注意这里传入的id并没有发生变化,我们只是简单进行了输出和数学计算://thisisapurefu......
  • useCallback,useMemo, React.memo的区别
     同:useCallback,useMemo和React.memo是三个在React中用于优化性能的方法。它们的主要目标是避免不必要的重新渲染和计算。因为当一个组件的状态发生变化时,React会重新渲染整个组件树。用这三个hook和组件,可以提升性能。 异:下面从属性,接收参数,返回值,意义和案例等方面进行详细地......
  • useeffect下调用`window.onresize`不生效的解决办法
    组件化开发,多个子组件多次调用onresize使主页面的onresize无法生效解决办法时使用addEventListener添加onresize函数useeffect(()=>{window.addEventListener('resize',function(){//当浏览器窗口大小发生变化时,触发的functionfn()console.log('1......
  • react- hooks 之 useMemo
    1.传入数组的变量需要在使用前进行定义,const[issueType,setIssueType]=useState('1');constissueDisable=useMemo(()=>{console.log('issueType改变啦',issueType,dataSource,haveDetaildataSource);},[issueType,dataSource,haveDetailda......
  • useMemo, useCallback, useEffect 三者区别
    useMemo父组件将一个【值】传递给子组件,若父组件的其他值发生变化时,子组件也会跟着渲染多次,会造成性能浪费;useMemo是将父组件传递给子组件的值缓存起来,只有当useMemo中的第二个参数状态变化时,子组件才重新渲染useMemo便是用于缓存该函数的执行结果,仅当依赖项改变后才会重......
  • react useMemo
    useMemo是React提供的一个用于优化组件性能的钩子函数。它可以缓存组件的计算结果,并在依赖项发生变化时重新计算。这可以避免在每次组件渲染时都重新计算相同的值,从而提高组件的性能。useMemo的语法如下:constmemoizedValue=useMemo(()=>computeExpensiveValue(a,b),......
  • react useCallback
    useCallback是一个ReactHooksAPI,它可以用于优化函数组件的性能,避免不必要的重新渲染。useCallback接受两个参数:第一个参数是一个回调函数,第二个参数是一个依赖数组,用于控制何时重新创建回调函数。当依赖数组中的任何一个值发生变化时,useCallback将返回一个新的回调函数。否......
  • react useEffect的用法
    useEffect是ReactHook的一种,用于在函数组件中定义副作用操作,比如改变DOM、发送网络请求、订阅事件等等。useEffect用于替代类组件中的生命周期方法。它接受一个函数作为第一个参数,在组件更新时调用这个函数,如果你需要在组件挂载时调用这个函数,需要传入一个空数组作为第二个参数;如......
  • 初学React useEffect Hook
    ReactHooks是从功能组件访问React的状态和生命周期方法的最佳方式。​​useEffect​​​Hook是一个在渲染之后和每次DOM更新时运行的函数(效果)。在本文中,将讨论一些......