Day27-useMemo

前言

前两天我们学习了React性能优化

  • memo 组件记忆
  • useCallback 函式参考记忆

而今天我们会学习useMemo来记住回传值,避免每次重复函式计算。

useMemo

syntax

useMemo(() => {
    //block
},[dependency])

以下我们有个组件,只要组件内的input表单输入,或是点击add button使state增加都会重新执行for回圈。

//App.js
import React, {useState,useMemo} from 'react'

function App() {
  const [name, setName] = useState('')
  const [state, setState] = useState(0)

  let temp = 0

  for(let i = 0; i < state; i++) {
    console.log('changed')
    temp += i
  }

  return(
    <div>
      <p>Memo:{temp}</p>
      <p>{state}</p>
      <button onClick={() => setState(state+1)}>add</button>
      <div>
        <input type="text" onChange={(e) =>setName(e.target.value)}/>
        <p>{name}</p>
      </div>
    </div>
  )
}

export default App

但我们只要state的值改变才执行回圈,而不是组件中状态改变就执行一遍。

於是我们使用useMemo纪录前一次的数值,并且绑定我们的依赖到state。

当state的值被改变了,才会呼叫callback执行回圈,若依赖的数值没有改变,便会回传上次所记忆的数值。

这样我们可以避免额外的操作导致效能浪费。

//App.js
import React, {useState,useMemo} from 'react'

function App() {
  const [name, setName] = useState('')
  const [state, setState] = useState(0)


  const result = useMemo(() => {
    let temp = 0
    for(let i=0; i <= state; i++) {
      temp += i
    }
    return temp
  },[state])

  
  return(
    <div>
      <p>Memo:{result}</p>
      <p>{state}</p>
      <button onClick={() => setState(state+1)}>add</button>
      <div>
        <input type="text" onChange={(e) =>setName(e.target.value)}/>
        <p>{name}</p>
      </div>
    </div>
  )
}

export default App

总结

这三天我们学了关於性能优化的部分,虽说使用记忆的方式会造成额外的效能消耗,但一定比不使用所造成的浪费低很多。

当然也可以把组件分的细,使耦合性降低!!!


<<:  Day 13 : 基础套件的介绍-random,利用程序帮你做乱数选择

>>:  【从实作学习ASP.NET Core】Day14 | 後台 | 用 Identity 实作会员功能

python入门学习day 3

python加减乘除基本运算 print('hello, world', end='***') pr...

数据流图初学者指南

数据流图为组织理解、完善和实施新流程或系统提供了一种直接、有效的方式。它们是您的流程或系统的可视化表...

Day11 - 如何查询目前期权帐户可用余额

今天的主题是如何查询目前期权帐户的可用余额,相关的官网教学可以点这个连结。因为我没有期权帐户,所以也...

Day 11 漏洞分析 - Vulnerability Analysis (nikto)

经过连续十天的收集情报,体验了各式工具,可以发现前面介绍的大部分工具都是单纯的收集情报,少部分则可以...

在程序里避开踩雷:安全引用空虚值、例外处理和延後、惰性初始化 Null Safety, Exception, lateinit, lazy

「哇,原来研究室是这样的啊。」诗忆东张西望。 「是呀,这里是大家办公的地方,实验的机器不在这里,所以...