Hazel Han
Midnight In Coding
Hazel Han
전체 방문자
오늘
어제
  • 분류 전체보기 (46)
    • Back-end (6)
      • java (0)
      • spring frameworks (6)
      • spring boot (0)
    • Front-end (29)
      • React (7)
      • Javascript (0)
      • html (7)
      • css (15)
    • DB (0)
    • Algorithms (2)
    • 회고록 (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩
  • css
  • 리액트
  • springframeworks
  • justcode
  • HTML
  • 스프링
  • 저스트코드
  • React
  • coding
  • 자바의정석
  • 기술블로그
  • 프로그래밍
  • Spring
  • 자바
  • 개발자
  • 남궁성
  • 스프링프레임워크
  • Java
  • 회고록

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Hazel Han

Midnight In Coding

Front-end/React

[JUSTCODE] Advanced Foundation - React (리)렌더링, 조건부 렌더링

2022. 10. 29. 22:05

(리)렌더링

화면에 UI를 그리는 것을 렌더링이라고 한다.

 

(리)렌더링의 과정

  1. 컴포넌트가 렌더링 된다. (이것을 mount라고 한다.)
  2. useEffect의 콜백함수가 실행된다. (이것을 side Effect라고 한다.)
  3. (리)렌더링은 state, props 등이 변경된 경우에 발생한다.
  4. useEffect의 의존성배열에 따라 렌더링이 달라진다.(의존성 배열이 없다면 -> 맨 처음에만 실행, 값이 있다면 -> 그 값이 변할 때마다 실행)
  5. state, props의 값이 변경되면 리렌더링된다.

 

ex)

부모 컴포넌트

import React, {useState, useEffect} from 'react';
import Child from './Child';

function Parent() {
	const [firstData, setFirstData] = useState([]);
	const [secondData, setSecondData] = useState({});

	//1. useEffect
	useEffect(() => {
		console.log("부모 컴포넌트 마운트 후");

		fetch("http://localhost:3001/data/lifecycleErrorData.json")
      .then(res => res.json())
      .then(res => {
			  console.log("부모 컴포넌트 fetch 완료");

				setFirstData(res.data);
			});

    return () => {
			// clean up 함수
      // unmount 될 때
		}
	}, []);

	//2. useEffect
	useEffect(() => {
		console.log("부모 컴포넌트 (리)렌더링 후");
  });

	console.log("부모 컴포넌트 (리)렌더링 전");

	return (
	<>
	  <h1>Parent</h1>
    <Child childData={firstData} />
	</>);
}

export default Parent;

자식 컴포넌트

import React, {useEffect} from 'react';

function Child(props) {
	useEffect(() => {
		console.log("자식 컴포넌트 마운트 후");
	}, []);

	useEffect(() => {
		console.log("자식 컴포넌트 (리)렌더링 후");
  });

	console.log("자식 컴포넌트 (리)렌더링 전");

	return (<h1>Child is here!!</h1>);
}

export default Child;

console.log 실행순서

  1. 부모 컴포넌트 (리)렌더링 전
  2. 자식 컴포넌트 (리)렌더링 전
  3. 자식 컴포넌트 마운트 후
  4. 자식 컴포넌트 (리)렌더링 후
  5. 부모 컴포넌트 마운트 후
  6. 부모 컴포넌트 (리)렌더링 후
  7. 부모 컴포넌트 fetch 완료
  8. ---첫번 째 렌더링 완료---
  9. 부모 컴포넌트 (리)렌더링 전
  10. 자식 컴포넌트 (리)렌더링 전
  11. 자식 컴포넌트 (리)렌더링 후
  12. 부모 컴포넌트 (리)렌더링 후

fetch 함수가 부모 컴포넌트 (리)렌더링 후보다 늦게 찍히는 이유는?

비동기 함수이기 때문에 실행하는 데에 시간이 걸리기 때문

 

중요 포인트

부모 컴포넌트가 렌더링되면, 자식 컴포넌트도 렌더링 된다.

 

 

조건부 렌더링

컴포넌트 함수 내부에서 특정 값에 따라 선택적으로 렌더링되는 것

 

조건부 렌더링에서는 삼항 연산자나 && 연산자를 사용한다. 그 차이는 무엇일까?

 

  • 삼항 연산자는 true일 때와 false일 때 각기 다른 값을 렌더링 할 수 있다.
  • 반면에 && 연산자는 값이 true일 때만 렌더링 된다.

&&연산자 사용 시 주의사항

  • 변수가 숫자 타입인 경우 0은 false 이다.
  • 변수가 문자열 타입인 경우 빈 문자열“”도 false이다.
저작자표시 (새창열림)

'Front-end > React' 카테고리의 다른 글

[JUSTCODE] Advanced Foundation - React dvanced Router  (0) 2022.10.29
[JUSTCODE] Advanced Foundation - React 재사용 컴포넌트  (0) 2022.10.29
[JUSTCODE] Basic Foundation - React useEffect  (0) 2022.10.24
[JUSTCODE] Basic Foundation - React useState, props  (0) 2022.10.24
[JUSTCODE] Basic Foundation - React Router, Saas  (0) 2022.10.20
    'Front-end/React' 카테고리의 다른 글
    • [JUSTCODE] Advanced Foundation - React dvanced Router
    • [JUSTCODE] Advanced Foundation - React 재사용 컴포넌트
    • [JUSTCODE] Basic Foundation - React useEffect
    • [JUSTCODE] Basic Foundation - React useState, props
    Hazel Han
    Hazel Han

    티스토리툴바