useCallback

作者: penelope_2bad | 来源:发表于2020-06-21 20:00 被阅读0次

1. 问题引发

  1. 子组件onChange调用了父组件的handleOnChange
  2. 父组件handleOnChange内部会执行setText(e.target.value)引起父组件更新
  3. 父组件更新会得到新的handleOnChange,传递给子组件,对于子组件来说接收到一个新的props
  4. 子组件进行不必要更新

2. 使用useCallback解决

import React, { useState, memo, useMemo, useCallback } from 'react'

const Child = memo((props) => {
  console.log(props);

  return (
    <div>
      <input type="text" onChange={props.onChange}/>
    </div>
  )
})

const Parent = () => {
  const [count, setCount] = useState(0)
  const [text, setText] = useState('')

  const handleOnChange = useCallback((e) => {
    setText(e.target.value)
  },[])

  return (
    <div>
      <div>count: {count}</div>
      <div>text: {text}</div>
      <button onClick={() => {
        setCount(count + 1)
      }}>+1</button>
      <Child onChange={handleOnChange} />
    </div>
  )
}

function App() {
  return <div><Parent /></div>
}

export default App
  1. handleOnChange被缓存了下来,尽管父组件更新了,但是拿到的handleOnChange还是同一个
  2. 对比useMemo,useMemo缓存的是一个值,useCallback缓存的是一个函数,是对一个单独的props值进行缓存
  3. memo缓存的是组件本身,是站在全局的角度进行优化

相关文章

  • 【web前端】useCallback 和 useMemo 的用法

    useCallback 使用useCallback可以避免组件重复渲染,提升性能,以下是一个使用useCallba...

  • useMemo和useCallback

    参考文章:链接 useMemo useCallback

  • useCallback - React源码解析(五)

    本文将讲解useCallback的源码实现。useCallback是也一个非常简单的钩子,其实现比useMemo还...

  • useCallback

    1. 问题引发 子组件onChange调用了父组件的handleOnChange 父组件handleOnChang...

  • useCallback

    简介 1 .优化子组件的渲染次数2 .父组件重新渲染组件的时候,传给子组件的函数类型的props也会重新生成,所以...

  • useCallback

    常见应用场景:当父组件传值或传递函数给子组件时,适合通过useMemo或useCallback将子组件的props...

  • useCallback

    一、前言 对于新手来说,没写过几次死循环的代码都不好意思说自己用过 React Hooks。本文将以useCall...

  • useCallback

    useCallback同前面讲的useMemo、useLayoutEffect一样可以用来提高性能。先来看看官网如...

  • react不同钩子useCallback与 useMeno

    useCallback性能优化的点: 1.当需要将一个函数传递给子组件时, 最好使用useCallback进行优化...

  • react的useMemo

    react的useMemouseMemo与useCallback使用指南

网友评论

    本文标题:useCallback

    本文链接:https://www.haomeiwen.com/subject/peoaxktx.html