Usually we cannot use the state value of useSate immediately after setting it. Is it the same for useMemo?
Asked
Active
Viewed 1,207 times
0
-
2Does this answer your question? [Asynchronous calls with React.useMemo](https://stackoverflow.com/questions/61751728/asynchronous-calls-with-react-usememo) – Nick Vu Mar 17 '22 at 08:08
1 Answers
2
useMemo
is asynchronous if it depends on asynchronous
values such as useState
.
To explain this, let's check a demo component:
import React, { useEffect, useMemo, useState } from 'react'
const App = () => {
const [value, setValue] = useState(1)
const memoValue = useMemo(() => value + 1, [value])
console.log('value is: ', value)
console.log('memoValue is: ', memoValue)
useEffect(() => {
setValue(10)
console.log('effect value is: ', value)
console.log('effect memoValue is: ', memoValue)
}, [])
return (
<div>test</div>
)
}
export default App
Its console output is:
value is: 1
memoValue is: 2
effect value is: 1
effect memoValue is: 2
value is: 10
memoValue is: 11
As you can see, after setValue
in useEffect
, value
is old, so does memoValue
.
Explain:
You can treat hooks as a function who re-executes when state
or props
changes. useMemo
is just a memorized function.
setValue
changes App
's state, marks App as a dirty component(need re-execute), but before App
re-executes, memoValue
has no way to update its value, so it is asynchronous
in your definition.

banyudu
- 1,046
- 9
- 19