세번째 로딩성능 개선

Automatic Batch

useTransition

// 예시
import { useState } from "react";

function App() {
    let [name, setName] = useState('');
    
    return (
    	<div className="App">
        	<input onChange={(e)=> { setName(e.target.value)}}/>
        </div>
    )
}
// 예시
import { useState } from "react";

let a = new Array(10000).fill(0)

function App() {
    let [name, setName] = useState('');
    
    return (
    	<div className="App">
        	<input onChange={(e)=> { setName(e.target.value)}}/>
        </div>
        // 성능 저하를 일으키기 위해 값이 변경할때마다 10000개의 출력이 발생하면 매우 느려진다.
        {
        	a.map(()=>{
        		return <div>{name}</div>
    		})
        }
    )
}
// 예시
import { useState, useTransition } from "react"; //import하고

let a = new Array(10000).fill(0)

function App() {
    let [name, setName] = useState('');
    let [isPending, startTransition] = useTransition(); //사용을 위한 변수설정을 한 후
   
    
    return (
    	<div className="App">
            // 성능 저하를 일으키는 부분을 감싸면된다.
        	<input onChange={(e)=> {
                    startTransition(() =>{
                    	setName(e.target.value)    
                    }
                }}/>
        </div>
        {
        	a.map(()=>{
        		return <div>{name}</div>
    		})
        }
    )
}
// 예시
import { useState, useTransition } from "react"; //import하고

let a = new Array(10000).fill(0)

function App() {
    let [name, setName] = useState('');
    let [isPending, startTransition] = useTransition(); //사용을 위한 변수설정을 한 후
   
    
    return (
    	<div className="App">
            // 성능 저하를 일으키는 부분을 감싸면된다.
        	<input onChange={(e)=> {
                    startTransition(() =>{
                    	setName(e.target.value)    
                    }
                }}/>
        </div>
        {
        	isPending ? '로딩중' : // 실행중일때 로딩중을 표시
        	a.map(()=>{
        		return <div>{name}</div>
    		})
        }
    )
}

useDefferedValue

// 예시
import { useState, useTransition, useDeferredValue } from "react"; 

let a = new Array(10000).fill(0)

function App() {
    let [name, setName] = useState('');
    let [isPending, startTransition] = useTransition();
    let state = useDeferredValue(name); // useDefferedValue에 입력된 함수는 변동이 생길때 느리게 처리해준다.
   
    
    return (
    	<div className="App">
            // 성능 저하를 일으키는 부분을 감싸면된다.
        	<input onChange={(e)=> {
                    startTransition(() =>{
                    	setName(e.target.value)    
                    }
                }}/>
        </div>
        {
        	isPending ? '로딩중' : 
        	a.map(()=>{
        		return <div>{state}</div>
    		})
        }
    )
}