• useCallback优化React Hooks程序性能


    useCallback

    使用场景是:有一个父组件,其中包含子组件,子组件接收一个函数作为props;通常而言,如果父组件更新了,子组件也会执行更新;

    import React, { useMemo, useCallback } from "react"
    let Counter = ({ value, children, onClick }) => {
      console.log('Render: ', children)
    
      return (
        <div onClick={onClick}>
          {children}: {value}
        </div>
      )
    }
    Counter = React.memo(Counter)
    
    
    
    const App = () => {
      const [count1, setCount1] = React.useState(0)
      const [count2, setCount2] = React.useState(0)
    
      const increaseCounter1 = () => {
        setCount1(count1 => count1 + 1)
      }
      const increaseCounter2 = () => {
        setCount2(count2 => count2 + 1)
      }
    
      return (
        <>
          <Counter value={count1} onClick={increaseCounter1}>Counter 1</Counter>
          <Counter value={count2} onClick={increaseCounter2}>Coutner 2</Counter>
        </>
      )
    }
    
    export default App
    
    

    但是大多数场景下,更新是没有必要的,我们可以借助useCallback来返回函数,然后把这个函数作为props传递给子组件;这样,子组件就能避免不必要的更新。

    import React, { useMemo, useCallback } from "react"
    let Counter = ({ value, children, onClick }) => {
      console.log('Render: ', children)
    
      return (
        <div onClick={onClick}>
          {children}: {value}
        </div>
      )
    }
    Counter = React.memo(Counter)
    
    
    
    const App = () => {
      const [count1, setCount1] = React.useState(0)
      const [count2, setCount2] = React.useState(0)
    
      const increaseCounter1 = useCallback(() => {
        setCount1(count1 => count1 + 1)
      }, [])
      const increaseCounter2 = useCallback(() => {
        setCount2(count2 => count2 + 1)
      }, [])
      console.log(increaseCounter1)
    
      return (
        <>
          <Counter value={count1} onClick={increaseCounter1}>Counter 1</Counter>
          <Counter value={count2} onClick={increaseCounter2}>Coutner 2</Counter>
        </>
      )
    }
    
    export default App
  • 相关阅读:
    django目录
    django之form表单验证
    django操作数据库之查询F,Q操作 和 seach搜索功能
    django的序列化
    三目运算
    【转】做有生命力的接口测试
    【转】浅谈反应测试
    【转】jmeter 进行java request测试
    【转】探索式测试:基本概念
    【转】 测试职业思考:如何成为一名优秀的软件测试工程师
  • 原文地址:https://www.cnblogs.com/jianxian/p/12535074.html
Copyright © 2020-2023  润新知