컴포넌트는 컴포넌트 바깥에서 props를 이용해 데이터를 마치 전달인자(arguments) 혹은 속성(attributes)처럼 전달 받을 수 있다. 즉 데이터를 전달하는 주체는 부모 컴포넌트가 된다. 이는 데이터 흐름이 하향식(top-down)임을 의미한다.
단방향 데이터 흐름이라는 원칙에 따라, 하위 컴포넌트는 상위 컴포넌트로부터 전달 받은 데이터의 형태 혹은 타이빙 무엇인지만 알 수 있다. 데이터가 state로부터 왔는지, 하드코딩으로 입려간 내용인지는 알지 못한다. 그러므로 하위 컴포넌트에서의 어떤 이벤트로 인해 상위 컴포넌트의 상태가 바뀌는 것은 마치 "역방향 데이터 흐름"과 같다.
상위 컴포넌트의 "상태를 변경하는 함수" 그 자체를 하위 컴포넌트로 전달하고, 이 함수를 하위 컴포넌트가 실행한다.
함수 내에서 어떤 구현이 함수 외부에 영향을 끼치는 경우 해당 함수는 Side Effect가 있다고 이야기한다.
순수 함수란, 오직 함수의 입력만이 함수의 결과에 영향을 주는 함수를 의미한다. 함수의 입력이 아닌 다른 값이 함수의 결과에 영향을 키치는 경우, 순수 함수라고 부를 수 없다. 또한 순수 함수는, 입력으로 전달된 값을 수정하지 않는다.
순수 함수에는 네트워크 요청과 같은 Side Effect가 없다. 순수 함수의 특징 중 하나는, 어떠한 전달 인자가 주어질 경우, 항상 똑같은 값이 리턴됨을 보장한다.
useEffect는 컴포넌트 내에서 Side Effect를 실행할 수 있게 하는 Hook이다.
이와 같이 매 번 새롭게 컴포넌트가 렌더링 될 때 Effect Hook이 실행된다.
useEffect(함수, [종속성1, 종속성2, ...])
종속성 배열에 들어있는 값의 변경이 일어날 때 effect함수가 실행된다.
Effect함수를 단 한번만 실행하게 하려면
1. 빈 배열 넣기
useEffect(함수,[])
2. 아무것도 넣지 않기(기본 형태)
useEffect(함수)