개발자
현재 리액트를 공부중인데 useEffect에 대해서 계속 헷갈리더라구요. useEffect는 처음에 렌더링이 될 때 최초에 한번만 실행이 된다. 그리고 주로 API 데이터작업을 할 때 사용한다...라는 정도만 알고 있는데 한번만 실행이 된다라는 말과 API 관련코드를 주로 왜 useEffect안에 작성이 되는지 이 부분이 이해가 되지 않더라구요. useEffect에 대해 구글링도 하고 공식문서도 읽어봤지만 아직 기초를 공부하고 있는 저에게는 설명이 너무 어렵더라구요. 그래서 useEffect에 대해서 정말 이해하기 쉽게 설명해주시면 너무 감사드리겠습니다.
답변 2
안녕하세요! 개발에서 멀어져서 가물가물하지만 얕은 지식을 꺼내봅니다 ㅎㅎ useEffect는 컴포넌트 생명주기에 관여하는 훅입니다. 그래서 처음에 렌더링될 때 한 번만 실행된다는 것은 반만 맞는 내용입니다. 최초 렌더링시 실행이 되고, 의존성 배열에 지정된 값들에 변화가 생기면 이를 감지하고 훅 내부에 있는 함수들이 다시 실행 됩니다. 여기에 API 함수가 있다면 다시금 데이터를 불러올테고 이 값이 컴포넌트 내부에 반영된다면 컴포넌트는 다시 리렌더링이 됩니다. 의존성 배열이 없는 경우 컴포넌트가 최초 렌더링 되는 시점에 한 번만 실행되지만 의존성 배열이 있는 경우 이러한 방식으로 동작합니다. 그리고 훅 내부에 리턴함수를 지정하면 컴포넌트가 언마운트 될 때(다른 페이지로 이동하여 해당 컴포넌트가 화면에서 사라질 때) 이 함수가 실행됩니다. 정리를해보자면, 1. 컴포넌트가 렌더링 될 때 최초로 실행된다. 2. 의존성 배열에 있는 값에 변화가 생기면 훅이 재실행 된다. 3. 훅이 반환하는 리턴함수가 있는 경우 컴포넌트가 언마운트 될 때 해당 함수가 실행된다. 입니다. 부족한 식견으로 여기까지만 기억이 나네요 ㅎㅎ 마지막으로 제가 react hook 공부할 때 좋았던 강의 영상 하나 추천드립니다! https://youtu.be/xnk_1Q1O5ro?si=szU_KptWwNmQt_Yc
익명
작성자
2024년 06월 15일
추천 영상까지!!! 너무 감사드립니다 ^^
useEffect에 대해서는 설명이 잘 된 듯 하여, 왜 API 관련 코드를 주로 useEffect 안에 작성하는 지에 대해 조금 남깁니다 ㅎㅎ 공식문서에서도 소개하기로 useEffect는 리액트 컴포넌트와 외부 시스템을 동기화하는 훅이라고 소개합니다. 여기서 외부 시스템이란, 리액트 내에서 제어할 수 없는 외부 API, 브라우저 API, 서드파티 라이브러리 등을 말합니다. 리액트 상태에 따라 외부 요소를 제어하거나, 외부에서 데이터를 가져와서 설정하는 데 사용되는 훅이기 때문에 useEffect 내부에서 외부 API를 호출해서 데이터를 가져오도록 하는 것입니다. useEffect의 의존성배열 설정 덕분에 중복된 호출을 방지할 수도 있습니다. 여기서 꼭 useEffect가 필요하지 않은 상황에서 사용되는 경우를 주의하시는 것이 좋은데, 이에 대해 리액트 공식문서를 읽어보시는 것을 추천드립니다 ㅎㅎ (Effect가 필요하지 않을 수도 있습니다.) [https://ko.react.dev/learn/you-might-not-need-an-effect]
익명
작성자
2024년 06월 18일
안녕하세요 답변주셔서 감사드립니다 ^^ api호출 부분에서 꼭 useEffect를 사용해야되는 줄 알았는데 필요없는 상황이 있다는 것을 알게 되었습니다. 공식문서부분도 꼭 읽어보겠습니다 감사드립니다 ^^
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 06월 14일
React에서, `useEffect` Hook은 생성된 컴포넌트가 렌더링 직후에 어떤 일을 수행해야 하는지를 명시하게 해줍니다. 이는 'side effect'들 역할을 합니다. side effect의 예로는 데이터 가져오기, 구독 설정하기, 수동적으로 React DOM 수정하기 등이 있습니다. `useEffect`는 React 컴포넌트에 부작용(side effects)을 추가하도록 돕습니다. 이 이해를 쉽게 설명하면 -- 함수(component) 내부에서 데이터를 가져와야 하거나 인터벨을 설정하거나 직접적인 DOM조작이 필요한 경우 등 사이드 이펙트가 발생하는 모든 동작들은 주로 useEffect 훅 안에 놓입니다. 그리고 "처음에 렌더링 될 때 최초 한 번만 실행"되는 것은 맞습니다. 만약 특정 상태(state)나 prop의 변경에 따라서 다시 실행되길 원한다면, useEffect의 두번째 매개변수로 받는 배열 dependency list에 해당 상태나 prop을 넣어주면 됩니다. 예를들어 다음과 같은 코드가 있다고 할 때, ```js useEffect(() => { console.log('This would only run once after initial render'); }, []) ``` 위 코드에서 `[]` 빈 배열을 `useEffect`의 두 번째 인자로 준것은 이 `useEffect`가 단 한 번만 실행되어야 함을 명시하는 것입니다. 빈 배열을 넣는 이유는 이 배열 안에 넣은 값들이 변경될 때마다 useEffect를 다시 실행하라는 의미이기 때문에, 아무것도 변경사항을 감지할 요소가 없으니 최초 한 번만 실행하게 됩니다. 즉, dependency list는 해당 useEffect가 어떤 state나 props의 변화에 따라 반응해야 하는지를 정의한 것입니다. 만약 특정 state 변수 `count` 의 변화에 따라 반응하게 하고 싶다면 다음과 같이 코드를 작성합니다. ```js const [ count, setCount ] = useState(0); useEffect(() => { console.log(`Count has changed to ${count}`); }, [count]) ``` 이렇게 하면 count값이 변할 때마다 `useEffect` 내의 함수가 호출되게 됩니다. 결론적으로, useEffect는 주로 외부 API와 통신하여 데이터를 가져오거나 Timer를 설정하는 등 'side effect'가 있는 로직을 처리하는 곳에서 많이 사용됩니다. 그리고 그 동작 시점을 컴포넌트 생명주기에 맞추어 제어할 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!