ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ useTransition์ด๋ ๋ฌด์์ผ๊น์?
**useTransition**์ **"์ฌ์ฉ์ ์ธํฐ๋์ (๋ฒํผ ํด๋ฆญ, ์ ๋ ฅ ๋ฑ)๊ณผ ๋ฌด๊ฑฐ์ด ์์ (ํ๋ฉด ๋ ๋๋ง)์ ๋๋ ์ ์ฒ๋ฆฌํ๋ ๋๊ตฌ"**์์.
์กฐ๊ธ ๋ ์ฝ๊ฒ ๋งํ๋ฉด:
- ์ฌ์ฉ์๊ฐ ์ด๋ค ๋์(์: ๊ฒ์, ๋ฒํผ ํด๋ฆญ)์ ํ์ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ ๋ถ๋ถ๊ณผ
- ๊ทธ ๋์ ์ดํ์ ํ๋ฉด์ ์ฒ์ฒํ ๋ ๋๋งํด์ผ ํ๋ ๋ถ๋ถ์ ๋๋์ด์ ์ฒ๋ฆฌํฉ๋๋ค.
๐ ์ useTransition์ด ํ์ํ ๊น์?
์์ํด๋ณด์ธ์. ์ฌ๋ฌ๋ถ์ด ๊ฒ์์ฐฝ์ ๊ธ์๋ฅผ ์
๋ ฅํ๊ณ ์์ด์. ๐
์
๋ ฅํ ๋๋ง๋ค ํ๋ฉด์ ๊ฒฐ๊ณผ๊ฐ ๋น ๋ฅด๊ฒ ์
๋ฐ์ดํธ๋๋ฉด ์ข๊ฒ ์ฃ ? ํ์ง๋ง ๊ฒฐ๊ณผ๊ฐ ๋ณต์กํ๊ณ ๋ง์์ ํ๋ฉด์ด ๋ฒ๋ฒ
๊ฑฐ๋ฆฌ๊ฑฐ๋ ๋๋ ค์ง๋ค๋ฉด ์ฌ์ฉ์๋ ๋ถํธํด์ง ๊ฑฐ์์.
useTransition์ ์ฌ์ฉํ๋ฉด:
- ์ ๋ ฅ์ด๋ ํด๋ฆญ๊ณผ ๊ฐ์ ๋์์ ์ฆ์ ๋ฐ์ํ๊ณ ,
- ํ๋ฉด์ ๋ณต์กํ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋งํ๋ ์์ ์ "์กฐ๊ธ ๋์ค์" ์ฌ์ ์๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ํจ์ฌ ๋ถ๋๋ฌ์์ ธ์! ๐
๐ ๏ธ useTransition ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
๊ฐ๋จํ ๊ฒ์์ฐฝ ์์ ๋ฅผ ํตํด useTransition์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ดํด๋ณผ๊ฒ์.
1. useTransition ์ฝ๋ ์์
import React, { useState, useTransition } from "react";
function SearchList() {
const [input, setInput] = useState(""); // ์
๋ ฅ๊ฐ ์ํ
const [searchResults, setSearchResults] = useState([]); // ๊ฒ์ ๊ฒฐ๊ณผ ์ํ
const [isPending, startTransition] = useTransition(); // useTransition ์ฌ์ฉ
const handleSearch = (e) => {
const value = e.target.value;
setInput(value);
// ํ๋ฉด ์
๋ฐ์ดํธ๋ฅผ ๋์ค์ผ๋ก ๋ฏธ๋ฃจ๊ธฐ
startTransition(() => {
const results = [];
for (let i = 0; i < 10000; i++) {
results.push(`๊ฒฐ๊ณผ ${value} - ${i}`);
}
setSearchResults(results); // ๊ฒฐ๊ณผ๋ฅผ ์
๋ฐ์ดํธ
});
};
return (
<div>
<h3>useTransition ์์ </h3>
<input
type="text"
placeholder="๊ฒ์์ด๋ฅผ ์
๋ ฅํ์ธ์"
value={input}
onChange={handleSearch}
/>
{isPending && <p>๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ค๋ ์ค...</p>} {/* ์งํ ์ค ํ์ */}
<ul>
{searchResults.map((result, index) => (
<li key={index}>{result}</li>
))}
</ul>
</div>
);
}
export default SearchList;
๐ ์ฝ๋ ์ค๋ช
- useTransition์ผ๋ก ์ํ ๋๋๊ธฐ
const [isPending, startTransition] = useTransition();
- isPending: ํ๋ฉด ์ ๋ฐ์ดํธ๊ฐ ์งํ ์ค์ธ์ง ํ์ธํ๋ ๊ฐ์ด์์.
- startTransition: ํ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ ๋กญ๊ฒ ์ฒ๋ฆฌํ๋๋ก ๋์์ฃผ๋ ํจ์์ ๋๋ค.
2. startTransition ์ฌ์ฉ
startTransition(() => {
const results = [];
for (let i = 0; i < 10000; i++) {
results.push(`๊ฒฐ๊ณผ ${value} - ${i}`);
}
setSearchResults(results);
});
- ์ ๋ ฅ๊ฐ์ด ๋ฐ๋๋ฉด startTransition ์์์ **๋ฌด๊ฑฐ์ด ์์ (๋๋์ ๊ฒ์ ๊ฒฐ๊ณผ ์์ฑ)**์ ์ฒ๋ฆฌํด์.
- ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ ฅ๊ฐ์ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ๋๊ณ , ํ๋ฉด ๋ ๋๋ง์ ์กฐ๊ธ ์ฌ์ ์๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค.
3. isPending๋ก ๋ก๋ฉ ํ์
- isPending ๊ฐ์ด true์ผ ๋๋ **"๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ค๋ ์ค..."**๊ณผ ๊ฐ์ ๋ก๋ฉ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์์ด์.
โก useTransition์ ์ฌ์ฉํ์ ๋์ ์ฅ์
- ์
๋ ฅ์ด๋ ํด๋ฆญ์ ์ฆ๊ฐ ๋ฐ์
- ์ฌ์ฉ์์ ์ ๋ ฅ์ด ํ๋ฉด์ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค.
- ๋ณต์กํ ์์
์ ์ฌ์ ๋กญ๊ฒ ์ฒ๋ฆฌ
- ๋ฌด๊ฑฐ์ด ๊ณ์ฐ์ด๋ ๋ ๋๋ง ์์ ์ ๋ค๋ฅธ ์์ ์ด ๋๋ ํ์ ์ฒ๋ฆฌ๋๋๊น ํ๋ฉด์ด ๋ฒ๋ฒ ์ด์ง ์์์.
- ์ฌ์ฉ์ ๊ฒฝํ(UX) ํฅ์
- ๋๋ฆฐ ์์ ๋๋ฌธ์ ์ ๋ ฅ์ด ์ง์ฐ๋์ง ์๊ณ ๋ถ๋๋ฝ๊ฒ ์๋ํฉ๋๋ค.
๐งฉ useTransition์ ์ธ์ ์ฌ์ฉํ ๊น์?
- ๊ฒ์ ๊ธฐ๋ฅ: ์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ง์์ง ๋ ํ๋ฉด์ด ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ์ง ์๋๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋.
- ๋ฆฌ์คํธ ๋ ๋๋ง: ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํด์ผ ํ ๋.
- ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๋ณต์กํ ์์ ์ด ๋์์ ์ผ์ด๋ ๋: ์ ๋ ฅ์ ์ฆ์ ์ฒ๋ฆฌํ๋, ๋ ๋๋ง์ ๋์ค์ ์ฒ์ฒํ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋.
๐ ์ ๋ฆฌํ์๋ฉด!
useTransition์ ์ฌ์ฉ์์ ๋น ๋ฅธ ๋์(์
๋ ฅ, ํด๋ฆญ ๋ฑ)๊ณผ ๋ฌด๊ฑฐ์ด ์์
(ํ๋ฉด ๋ ๋๋ง)์ ๋๋ ์ ์ฒ๋ฆฌํด์ฃผ๋ ํ
์ด์์.
์ฌ์ฉ์ ์
๋ ฅ์ ์ฆ์ ๋ฐ์ํ๊ณ , ๋ณต์กํ ๋ ๋๋ง์ ์กฐ๊ธ ๋์ค์ ์ฒ๋ฆฌํด์ ํ๋ฉด์ด ๋ถ๋๋ฝ๊ฒ ๋์ํ๋๋ก ๋์์ค๋๋ค. ๐
'web > react hook' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
useSyncExternalStore (1) | 2024.12.14 |
---|---|
useState (0) | 2024.12.14 |
useRef (0) | 2024.12.14 |
useReducer (0) | 2024.12.14 |
useOptimistic (0) | 2024.12.14 |
- Total
- Today
- Yesterday
- useinsertioneffect
- finddomnode
- prefetchdns
- ๋ฐ์ดํฐ์ ์ง
- experimental_taintobjectreference
- usedeferredvalue
- zustand
- ์ํ๊ด๋ฆฌ
- dns-prefetch
- react dom
- Nextjs
- react hook
- react dom hook
- react
- Store
- useRef
- ์ต์ ๋ฐ์ดํฐ
- experimental_taintuniquevalue
- experimental
- preconnect
- ์ธ๋ถํฐํธ
- useformstatus
- useid
- Props
- ์ ์ฅ์
- ์คํ์
- ๋ฒ ํ
- state
- flushsync
- component
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |