前两天我们学习了React性能优化
而今天我们会学习useMemo来记住回传值,避免每次重复函式计算。
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加减乘除基本运算 print('hello, world', end='***') pr...
数据流图为组织理解、完善和实施新流程或系统提供了一种直接、有效的方式。它们是您的流程或系统的可视化表...
今天的主题是如何查询目前期权帐户的可用余额,相关的官网教学可以点这个连结。因为我没有期权帐户,所以也...
经过连续十天的收集情报,体验了各式工具,可以发现前面介绍的大部分工具都是单纯的收集情报,少部分则可以...
「哇,原来研究室是这样的啊。」诗忆东张西望。 「是呀,这里是大家办公的地方,实验的机器不在这里,所以...