front/react

[react] React Transition (useTransition)

λ°°κ³ νŒŒμš” 2026. 1. 4. 16:05
728x90

πŸ“ useTransition Hook

  • 이 훅을 μ‚¬μš©ν•˜λ©΄ λŒ€κ·œλͺ¨ μ—…λ°μ΄νŠΈ 쀑에도 λ¦¬μ•‘νŠΈ μ•±μ˜ λ°˜μ‘μ„±μ„ μœ μ§€ν•˜λŠ” 데 도움이 됨.
  • 이런 κ²½μš°μ— μ‚¬μš©
    1. UIλ₯Ό μ •μ§€μ‹œν‚¬ 수 μžˆλŠ” 느린 μž‘μ—…
    2. λ‹Ήμž₯ μ€‘μš”ν•˜μ§€ μ•Šμ€ μ—…λ°μ΄νŠΈ
    3. ν‘œμ‹œλ˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” 검색 κ²°κ³Ό
  • /** λžœλ”링이 λŠ¦μ–΄μ§€λ©΄ 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