React

React 사이드이펙트

테라시아 2024. 12. 16. 15:14

1. Side-Effect
    - 함수 내 특정 동작이 함수 외부에 영향을 끼쳐, 프로그램 동작을 이해하기 어렵게 만드는 행위
    - settimeout, setinterval
        - 예측하기 어려운 함수, 종료 후 시점에서 어떤 작업을 하고 싶을 때
    - 서버 통신(fetch) 로 통신을 할 때
        - 사용자가 요청했을 때 이후 또는 직전에 어떤 작업을 하고 싶을 경우

2. useEffect
    - Side-Effect를 따로 관리하여 컴포넌트가 최대한 순수 함수를 유지할 수 있도록 도와주는 함수
    - useEffect()는 랜더링이 모두 끝난 다음에 실행된다.

    가용 범위는?

    - 랜더링 될 때 마다 실행
    > useEffect(()=>{})

    - 최초 랜더링(마운트)될 때 실행
    > useEffect(()=>{}, [])

    - 특정 컴포넌트가 변경될 때 실행
    > useEffect(()=>{}, [state])

 

 

☆ Code

 

★ SideEffect.jsx

import React, { useEffect, useState } from 'react';

const SideEffect = () => {

    const [color, setColor] = useState("black")
    const [name, setName] = useState("");

    const onClickToChangeColor = () => {
        setColor("red")
    }

    const onClickToChangeName = () => {
        setName("홍길동")
    }

    useEffect(()=> {
        console.log("색상이 변경 됐을 때 실행하는 콘솔😁")
    }, [color])
    
    return (
        <div>
            <h1 style={{color}}>안녕하세요! {name}님</h1>
            <button onClick={onClickToChangeColor}>색상 변경</button>
            <button onClick={onClickToChangeName}>이름 변경</button>
        </div>
    );
};

export default SideEffect;

 

★ SideEffectMount

import React, { useEffect, useState } from 'react';

const SideEffectMount = () => {

    console.log("최초 마운트")

    const [users, setUsers] = useState([])

    useEffect(()=>{
        const getDates = async () => {
            const response = await fetch('https://jsonplaceholder.typicode.com/users')
            const datas = await response.json();
            console.log('리랜더링')
            return datas
        }
        getDates().then(setUsers)
    }, [])

    return (
        <div>
            {users.map((user, i) => <p key={i}>{user.name}</p>)}
        </div>
    );
};

export default SideEffectMount;

'React' 카테고리의 다른 글

React 스타일 사용하기  (0) 2024.12.20
React useMemo, useCallback  (0) 2024.12.16
React 라이프사이클  (1) 2024.12.15
React 레퍼런스 실습  (0) 2024.12.11
React 레퍼런스  (0) 2024.12.10