//Parent.js
import React, { useState, useEffect } from "react";
import Child from "./Child";
function Parent() {
const [data, setdata] = useState([]);
//8. 부모 처음 렌더링 후 한 번만 실행
useEffect(() => {
//여기 콘솔 출력 후 ↓
console.log("부모 컴포넌트 마운트 후");
//fetch()실행!
fetch("url")
.then((res) => res.json())
.then((res) => {
console.log("부모 컴포넌트 fetch 완료");
//다시 렌더링(data의 상태 변함)
setdata(res.data);
});
return () => {
// clean up 함수
// unmount 될 때
};
}, []);
//9. 부모 컴포넌트가 렌더링 될 때마다 실행
useEffect(() => {
console.log("부모 컴포넌트 (리)렌더링 후");
});
console.log("부모 컴포넌트 (리)렌더링 전"); //1 : side Effect, 렌더링 전에 먼저 실행된다.
// 2. 부모 컴포넌트 렌더링
return (
<>
<h1>Parent</h1>
//3. 부모 컴포넌트 렌더링 중 자식 컴포넌트를 그린다.
<Child childData={data} />
</>
);
}
export default Parent;
//Child.js
import React, { useState, useEffect } from "react";
function Child(props) {
// 6. 자식 컴포넌트가 맨 처음 렌더링 된 후에 한 번만 실행
useEffect(() => {
console.log("자식 컴포넌트 마운트 후");
}, []);
//7. 자식 컴포넌트 렌더링 할 때마다 실행
useEffect(() => {
console.log("자식 컴포넌트 (리)렌더링 후");
});
//4. 자식 컴포넌트 렌더링 전에 side Effect 실행
console.log("자식 컴포넌트 (리)렌더링 전");
//5. 자식 컴포넌트 렌더링
return <h1>Child is here!!</h1>;
}
export default Child;
👪핵심 : 부모 컴포넌트가 렌더링하면 자식 컴포넌트로 렌더링한다!
- true로 인정되는 것들(Truethy) : 0을 제외한 정수, true, 값이 있는 문자열, {}, []
- false로 인정되는 것들(falsy) : 0, undefined, 값이 할당되지 않은 변수(undefined), 빈문자열(’’),null, NaN
useEffect 관련 에러는 Hook의 순서때문에 발생하는 경우가 많다고 한다. 코드를 짤 때 렌더링 순서에 신경써야겠다는 생각이 들었다.