Effect Hook
React 컴포넌트 외부에서 데이터를 처리하고 받아오는 과정
Side Effect
(부수 효과)Side Effect
: 함수 내에서 어떤 구현이 함수 외부에 영향을 끼치는 경우
React에서는 컴포넌트 내에서 fetch를 사용해 API 정보를 가져오거나 이벤트를 활용해 DOM 직접 조작할 때를 말한다.
let foo = 'hello';
function bar() {
foo = 'world';
}
bar(); // bar는 Side Effect를 발생
Pure Function
(순수 함수)Pure Function
: 오직 함수의 입력만이 함수의 결과에 영향을 주는 함수
function upper(str) {
return str.toUpperCase(); // toUpperCase 메소드는 원본을 수정하지 않습니다 (Immutable)
}
upper('hello') // 'HELLO'
React의 함수 컴포넌트는, props가 입력, JSX Element가 출력.
// Side Effect도 없으며, 순수 함수로 작동.
function SingleTweet({ writer, body, createdAt }) {
return <div>
<div>{writer}</div>
<div>{createdAt}</div>
<div>{body}</div>
</div>
}
Effect Hook
기본useEffect
컴포넌트 내에서 Side effect를 실행할 수 있게 하는 Hook
useEffect
의 첫 번째 인자는 함수.Effect Hook
조건부 실행useEffect
의 두 번째 인자는 배열.종속성 배열
: 해당 배열엔 어떤 값의 목록이 들어간다.
API
useEffect(함수, [종속성1, 종속성2, ...])
- 배열 내의 종속성1, 또는 종속성2의 값이 변할 때, 첫 번째 인자의 함수가 실행
- 배열 내의 어떤 값이 변할 때에만, (effect가 발생하는) 함수가 실행
useEffect(함수, [])
useEffect(함수)
AJAX
요청목록 내 필터링을 구현하기 위해서는 두 가지 접근이 있다.
장점 | 단점 | |
---|---|---|
컴포넌트 내부에서 처리 | HTTP 요청의 빈도를 줄일 수 있다 | 브라우저(클라이언트)의 메모리 상에 많은 데이터를 갖게 되므로, 클라이언트의 부담이 늘어난다 |
컴포넌트 외부에서 처리 | 클라이언트가 필터링 구현을 생각하지 않아도 된다 | 빈번한 HTTP 요청이 일어나게 되며, 서버가 필터링을 처리하므로 서버가 부담을 가져간다 |