80일
- 리액트 컴포넌트 실행 순서
컴포넌트가 브라우저상에 나타나고 (Mount) 업데이트 되고(update) 사라지는 (Unmount) 일련의 과정
첫 렌더링이 이루어 졌을 경우 를 말하며 return 후 jsx 실행후에 브라우저 상에 UI 이가 나타나면서 render된다. render 이후에 일어 나는 현상을 componentDidMount라고 한다.
새로운 프롭스를 받았을때, 스태이트변경함수가 실행 했을때 리렌더링이 된다. 리렌더링 이후에 다시 컴포넌트 상단 위에서 부터 코드를 다시 읽어 내려오면서 return 후 jsx를 실행하고 새로운 UI 를 업데이트 한다.
이후에 일어 난 현상을 componentDidUpdate 라고 한다.
컴포넌트가 곧 사라질 경우 componenetWillUnmout 라고 한다.
componentDidMount, componentDidUpdate, componenetWillUnmount 3가지 사이드 이펙트는 UseEffect 에 의해서 구현이 된다.
useEffect (()=>{
//componentDidMount (처음 컴포넌트 렌더링 된 이후 실행)
return ()=>{
//componentWillUnmount (컴포넌트가 사라지기 직전에 실행)
}
},[])
useEffect(()=>{
//componentDidMount (처음 컴포넌트 렌더링된 이후 실행)
//componentDidUpdata(변경된 state로 컴포넌트 렌더링 이후 실행)
},[state])
console.log('첫렌더링')
const [string, setString] = useState('스트링')
const [number, setNumber] = useState(0)
console.log('string:' string)
console.log('number:' :number)
return (
<div>
{console.log("return jsx")}
<h1>Home</h1>
<Link to="/nextPage">nextPage</Link>
</div>
)
console.log('첫렌더링')//1 ,7
const [string, setString] = useState('스트링')
const [number, setNumber] = useState(0)
console.log('string:' string)//2 ,8
console.log('number:' :number)//3, 9
useEffect(() => {
console.log("componentDidMount"); // 5.컴포넌트 마운트 직후 실행
setString("변경값");
setNumber(100);
console.log("비동기 테스트");//6
return () => {
console.log("componentWillUnmount"); // 컴포넌트 언마운트 직전 실행
};
},[])
return (
<div>
{console.log("return jsx")}//4 10
<h1>Home</h1>
<Link to="/nextPage">nextPage</Link>
</div>
)
console.log('첫렌더링')//1 8
const [string, setString] = useState('스트링')
const [number, setNumber] = useState(0)
console.log('string:' string)//2 9
console.log('number:' :number)//3 10
useEffect(() => {
console.log("componentDidMount"); // 5.컴포넌트 마운트 직후 실행
setString("변경값");
setNumber(100);
console.log("비동기 테스트");//6
return () => {
console.log("componentWillUnmount"); // 7 12컴포넌트 언마운트 직전 실행
};
},[])
useEffect(() => {
console.log("componentDidMount or componentDidUpdate");//4, 11
}, [string]);
return (
<div>
{console.log("return jsx")}//4 7
<h1>Home</h1>
<Link to="/nextPage">nextPage</Link>
</div>
)
console.log("Home 컴포넌트 최상단 / 렌더링 시작!");
const [string, setString] = useState("초기값");
const [number, setNumber] = useState(0);
console.log("string:", string);
console.log("number:", number);
const { data, isLoading } = useQuery("NowPlaying", getNowPlaying);
console.log("data:", data);
console.log("isLoading:", isLoading);
return (
<div>
{console.log("return jsx")}
<h1>Home</h1>
<Link to="/company">Go To Company Page</Link>
</div>
);
}