batching
- state๋ณ๊ฒฝํจ์๋ฅผ ์ฐ๋ฌ์์ 3๊ฐ ์ฌ์ฉํ๋ฉด ์ฌ๋ ๋๋ง๋ ์๋ 3๋ฒ ๋์ด์ผํ์ง๋ง ๋ฆฌ์กํธ๋ ๋๋ํ๊ฒ๋ ์ฌ๋ ๋๋ง์ ๋ง์ง๋ง์ 1ํ๋ง ์ฒ๋ฆฌํด์ค๋ค. ์ด๋ฐ ์ฌ๋ ๋๋ง ๋ฐฉ์ง๊ธฐ๋ฅ์ batching์ด๋ผ๊ณ ํ๋ค.
- ๊ทผ๋ฐ ๋ฌธ์ ๋ ajax์์ฒญ, setTimeout์์ state๋ณ๊ฒฝํจ์๊ฐ ์๋ ๊ฒฝ์ฐ batching์ด ์ผ์ด๋์ง ์๋๋ค. ๋ฆฌ์กํธ 17๋ฒ์ ๊น์ง ๊ทธ๋ฐ ์์ผ๋ก ์ผ๊ด์ ์ด์ง ์๊ฒ ๋์ํ๋๋ฐ18๋ฒ์ ์ดํ ๋ถํฐ๋ ์ด๋ ์๋ ๊ฐ์ ์ฌ๋ ๋๋ง์ ๋ง์ง๋ง์ 1๋ฒ๋ง ๋๋ค.
- batching ๋๋๊ฒ ์ซ๊ณ state๋ณ๊ฒฝํจ์ ์คํ๋ง๋ค ์ฌ๋ ๋๋ง์ํค๊ณ ์ถ์ผ๋ฉด flushSync๋ผ๋ ํจ์๋ฅผ ์ฐ๋ฉด ๋๋ค.
setCount(1)
setName(2)
setValue(3) //์ฌ๊ธฐ์ 1๋ฒ๋ง ์ฌ๋ ๋๋ง๋จ
useTransition
useTransition๋ก ์ฌ๋ ๋๋ง์ด ์ค๋๊ฑธ๋ฆฌ๋ ๋ถ๋ถ์ ๊ฐ์ธ๋ฉด ๋ ๋๋ง์ ๋ฒ๋ฒ ์ด์ง ์๊ฒ ํด์ค๋ค.
- startTransition() ํจ์ : state๋ณ๊ฒฝํจ์ ๊ฐ์๊ฑธ ๋ฌถ์ผ๋ฉด ๊ทธ๊ฑธ ๋ค๋ฅธ ์ฝ๋๋ค๋ณด๋ค ๋์ค์ ์ฒ๋ฆฌํด์ค๋ค.
import {useState, useTransition} from 'react'
let a = new Array(10000).fill(0)
function App(){
let [name, setName] = useState('')
let [isPending, startTransition] = useTransition()
return (
<div>
<input onChange={ (e)=>{
startTransition(()=>{
setName(e.target.value)
})
}}/>
{
a.map(()=>{
return <div>{name}</div>
})
}
</div>
)
}
๊ทธ๋์ <input> ํ์ดํ๊ฐ์ด ์ฆ๊ฐ ๋ฐ์ํด์ผํ๋๊ฑธ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํด์ค ์ ์๋ค.
๋ฌผ๋ก ๊ทผ๋ณธ์ ์ธ ์ฑ๋ฅ๊ฐ์ ์ด๋ผ๊ธฐ๋ณด๋จ ํน์ ์ฝ๋์ ์คํ์์ ์ ๋ค๋ก ์ฎ๊ฒจ์ฃผ๋ ๊ฒ์ผ ๋ฟ์ด๋ค.
- isPending : startTransition() ์ผ๋ก ๊ฐ์ผ ์ฝ๋๊ฐ ์ฒ๋ฆฌ์ค์ผ ๋ true๋ก ๋ณํ๋ ๋ณ์์ด๋ค.
{
isPending ? "๋ก๋ฉ์ค๊ธฐ๋ค๋ฆฌ์
" :
a.map(()=>{
return <div>{name}</div>
})
}
์์ ์ฝ๋๋ useTransition์ผ๋ก ๊ฐ์ผ๊ฒ ์ฒ๋ฆฌ์๋ฃ๋๋ฉด <div>{name}</div> ์ด ๋ณด์ธ๋ค.
useDeferredValue
- startTransition()๋ ์ฉ๋๊ฐ ๋น์ทํ๋ค.
- ๊ทผ๋ฐ ์๋ state ์๋๋ฉด ๋ณ์ํ๋๋ฅผ ์ง์ด๋ฃ์ ์ ์๊ฒ ๋์ด์๋ค. ๊ทธ๋์ ๊ทธ ๋ณ์์ ๋ณ๋์ฌํญ์ด ์๊ธฐ๋ฉด ๊ทธ๊ฑธ ๋ฆ๊ฒ ์ฒ๋ฆฌํด์ค๋ค.
import {useState, useTransition, useDeferredValue} from 'react'
let a = new Array(10000).fill(0)
function App(){
let [name, setName] = useState('')
let state1 = useDeferredValue(name)
return (
<div>
<input onChange={ (e)=>{
setName(e.target.value)
}}/>
{
a.map(()=>{
return <div>{state1}</div>
})
}
</div>
)
}
useDeferredValue ์์ state๋ฅผ ์ง์ด๋ฃ์ผ๋ฉด ๊ทธ state๊ฐ ๋ณ๋์ฌํญ์ด ์๊ฒผ์ ๋ ๋์ค์ ์ฒ๋ฆฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ let state์ ์ ์ฅํด์ค๋ค.
'๐ปWEB FrontEnd > ํ๋ ์์ํฌ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
PWA(Progressive Web App) (0) | 2022.07.15 |
---|---|
์ฑ๋ฅ๊ฐ์ (2) - ์ฌ๋ ๋๋ง ๋ง๋ ๋ฒ (0) | 2022.07.13 |
์ฑ๋ฅ๊ฐ์ (1) - lazy import (0) | 2022.07.13 |
react-query : ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ค์ํ ๋? (0) | 2022.07.13 |
localStorage (0) | 2022.07.13 |