728x90
π useTransition Hook
- μ΄ ν μ μ¬μ©νλ©΄ λκ·λͺ¨ μ λ°μ΄νΈ μ€μλ 리μ‘νΈ μ±μ λ°μμ±μ μ μ§νλ λ° λμμ΄ λ¨.
- μ΄λ° κ²½μ°μ μ¬μ©
- UIλ₯Ό μ μ§μν¬ μ μλ λλ¦° μμ
- λΉμ₯ μ€μνμ§ μμ μ λ°μ΄νΈ
- νμλλλ° μκ°μ΄ 걸리λ κ²μ κ²°κ³Ό
- /** λλλ§μ΄ λ¦μ΄μ§λ©΄ Loading... μ΄ λ¨κ² λ¨.
textλ μ¦μ λλλ§ λμ§λ§, μ§μ°μ΄ λ°μνκ² λλ©΄ isPending μ κ°μ΄ κ³μν΄μ true μ΄κΈ° λλ¬Έμ
<p>Loading...</p> μ λλλ§μ λ³ν©λκ±°λ μλ΅λ μ μμ.
κ³μ tureλΌμ λ³λνμ§λ₯Ό μμ ν λκΉ~ ) */ - --> λλλ§ νμκ° μ€μ΄λ€κ² λ¨!!
import { useState, useTransition } from "react";
import {createRoot} from "react-dom/client";
function SearchBar() {
const [text, setText] = useState("");
const [results, setResults] = useState("");
const [isPending, startTransition] = useTransition();
const handleChange = (e) => {
// Urgent
setText(e.target.value); // λͺ¨λ μ²λ¦¬κ° λ¨.
// non-urgent
startTransition( () => { /** μ²λ¦¬λ μ¦μ λ μ μλλ°, λλλ§μ λ¦μ΄μ§ μ μμ. */
setResults(e.target.value);
});
}
return (
<div>
<input value={text} onChange={handleChange} />
{isPending ? (<p>Loading...</p>) : (<p>Search Result for : {results}</p>)}
{ /** λλλ§μ΄ λ¦μ΄μ§λ©΄ Loading... μ΄ λ¨κ² λ¨.
* textλ μ¦μ λλλ§ λμ§λ§, μ§μ°μ΄ λ°μνκ² λλ©΄ isPending μ κ°μ΄ κ³μν΄μ true μ΄κΈ° λλ¬Έμ
* <p>Loading...</p> μ λλλ§μ μλ΅λ μ μμ.
* (κ²μ tureλΌμ λ³λνμ§λ₯Ό μμ ν
λκΉ~ ) */ }
</div>
);
}
createRoot(document.getElementById('react4')).render(
<SearchBar />
);
π ?
- γ γ
π ?
- γ γ
π ?
- γ γ
μΆμ² :
κ°λ° 곡λΆλ₯Ό μν λΈλ‘κ·Έ μ λλ€.
μ€λ₯κ° μλ€λ©΄ λκΈλ‘ μλ €μ£ΌμΈμ!
κ°μ¬ν©λλ€.

728x90
'front > react' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [react] React Hook 2 (useContext, useRef) (0) | 2026.01.06 |
|---|---|
| [react] React Hooks 1 (useState, useEffect) (0) | 2026.01.04 |
| [react] React Router (BrowserRouter, Routes, Route, Link, Outlet, useParams) (0) | 2026.01.04 |
| [react] css μ¬μ© κ΄λ ¨ (inline css, css obj, import css, import css module, composes, global css className) (1) | 2026.01.02 |
| [react] createPortal, Suspense (0) | 2026.01.01 |