강의, 책/[React] ReactJS로 영화 웹 서비스 만들기

#6. Effects

hye3193 2024. 2. 17. 12:32

Effect

특정 코드들이 처음 컴포넌트를 렌더링 할 때에만 실행되고, state가 변경되어 리렌더링 할 때에는 실행되지 않게 하기 위해 사용할 수 있다

function App() {
    const [counter, setValue] = useState(0);
    const onClick = () => setValue((prev) => prev + 1);
    useEffect(() => {
        console.log("Call the API.");
    }, []);
    return (
        <div>
            <h1>{counter}</h1>
            <button onClick={onClick}>click me</button>
        </div>
    );
}

위와 같이 useEffect의 첫번째 argument에 함수를 넣어두면, 첫번째 render 시점에만 동작하고, state가 변경되어 리렌더링되어도 여러 번 실행되지 않는다

딱 한 번만 실행되는 것이다

 

const [keyword, setKeyword] = useState("");
const onChange = (event) => setKeyword(event.target.value);
useEffect(() => {
    console.log("SEARCH FOR", keyword);
}, [keyword]);

useEffect의 두번째 argument(배열)에 변수를 넣어두면, 해당 변수의 값이 변경될 때마다 함수를 실행시킨다

 

Claenup

function Hello() {
    useEffect(() => {
        console.log("Im here!");
    }, []);
    return <div>Hello</div>;
}

function App() {
    const [showing, setShowing] = useState(false);
    const onClick = () => setShowing((prev) => !prev);
    return (
        <div>
        { showing ? <Hello /> : null }
            <button onClick={onClick}>
                {showing ? "Hide" : "Show"}
            </button>
        </div>
    );
}

위와 같이 코드를 작성하게 되면, showing 값이 false일 때 Hello 컴포넌트가 아예 스크린상에서 지워지기 때문에, 다시 Hello 컴포넌트를 렌더링하게 되면 useEffect를 사용했던 함수도 다시 실행되게 된다

 

function Hello() {
    useEffect(() => {
        console.log("Created!");
        return () => console.log("Destoryed!");
    }, []);
    return <div>Hello</div>;
}

useEffect의 함수에서 return값을 주게 되면, 이 값은 컴포넌트가 destory될 때 실행되게 된다

 

function Hello() {
    function byFn() {
        console.log("Destoryed!");
    }
    function hiFn() {
        console.log("Created!");
        return byFn;
    }
    useEffect(() => {hiFn}, []);
    return <div>Hello</div>;
}

위와 똑같이 동작하는 코드이다

즉, useEffect에서 동작하는 함수의 반환값으로 또 다른 함수를 넣어주면, 그 함수는 컴포넌트가 destroy될 때 실행되게 된다

'강의, 책 > [React] ReactJS로 영화 웹 서비스 만들기' 카테고리의 다른 글

#4. Props  (0) 2024.02.16
#3. State  (0) 2024.02.15
#2. The Basics of React  (0) 2024.02.15