FE코크
탄산 가득 시원한 개발일지
FE코크
전체 방문자
오늘
어제
  • 분류 전체보기 (43)
    • 우아한테크코스 (22)
      • 우아한테크코스4기 (4)
      • 우아한테크코스3 (10)
      • 회고록 (8)
    • Web (0)
      • HTTP 웹 기본지식 (0)
    • JavaScript (2)
    • React.js (12)
    • 알고리즘 풀이 (2)
    • HTML, CSS (4)
    • 기타 (1)
      • 일상 (0)
      • 후기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 레벨1회고
  • 우아한테크코스
  • 주간회고
  • 자바스크립트
  • react.js
  • 프리코스
  • Reactjs
  • 노마드코더
  • 백준
  • JavaScript
  • React.DOM
  • jsx
  • 우아한테크코스 3기
  • createRoot
  • 4기
  • 알고리즘
  • prop drilling
  • 리액트
  • 코어자바스크립트
  • CSS
  • 회고록
  • state
  • Props
  • 재택하고싶은데
  • 우테코4기
  • react
  • 프론트엔드
  • 우테코
  • 회고
  • 개발자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
FE코크

탄산 가득 시원한 개발일지

[React] Props(불변 객체, Prop Drilling)
React.js

[React] Props(불변 객체, Prop Drilling)

2022. 6. 22. 20:39

결, 꼬재랑 함께하는 레벨2 방학 스터디

 

😀 Props

  • 컴포넌트에 어떠한 값을 전달할 때 props를 사용한다. 여기서 props는 properties의 줄임말이다.
  • props는 부모 컴포넌트가 전달할 수도 있고 컴포넌트 자체의 defaultProps 정적 메서드(static method)를 통해 전달할 수도 있다.
  • props는 불변성을 가진 읽기 전용이다.

 

porps 예시

// 함수 컴포넌트
function Coke(props){
	return <h1>Hello, {props.name}</h1>;
}

 

// 클래스 컴포넌트
class Coke extends React.Component{
	render(){
		return <h1>Hello, {this.props.name}</h1>;
	}
}

 

// 비구조화 할당(구조 분해 할당)
function Coke({ name }){
	return <h1>Hello, {name}</h1>
}

 

// defaultProps
function Coke({ name }){
	return <h1>Hello, {name}</h1>
}

Coke.defaultProps = {
	name: '코카콜라'
}

// or

function Coke({ name = '코카콜라' }){
	return <h1>Hello, {name}</h1>
}

 

props.children

컴포넌트 태그 사이에 값이 있을때 ‘children’이란 예약어를 사용한다.

props.children

 

 

😮 리액트에서 속성을 불변 객체로 다루는 이유는 무엇일까요? 또, 불변 객체로 다루지 않았을 때 발생할 수 있는 이슈는 무엇일까요?

불변 객체란?

  • 객체 생성 후에 상태를 바꿀 수 없는 객체를 말한다.

불변 객체를 사용하는 이유는?

  • 불변 객체의 상태를 변경할 수 없기 때문에 여러 곳에서 사용하더라고 안전하게 사용할 수 있다.
  • 불변 객체에 대해 작업하는 코드는 불변 객체를 사용하는 곳에 영향을 미치는 것을 고려하지 않아도 된다.
  • 불변 객체를 복사할 경우, 참조만 하기 때문에 메모리를 아끼고 성능도 향상시킬 수 있다.

React에서 Props, State의 불변성

  • React에서는 Props와 State의 변경을 불변성을 이용해 감지하고 변경이 되었다면 리렌더링을 한다.
  • 그러나 자바스크립트에서 참조 타입의 데이터인 객체는 메모리 힙 영역에 저장이 되어 내부 프로퍼티를 변경해도 같은 참조를 가지게 된다. 따라서 React에서는 객체의 특정 프로퍼티만 변경해도 객체가 변경이 되지 않았다고 인식하여 리렌더링이 발생되지 않는다.
  • 객체의 프로퍼티를 변경 할려면 스프레드 연산자를 이용하여 내부 프로퍼티를 변경 시키거나 immer 라이브러리와 같은 라이브러리를 사용해야 한다.
// spread operator
const [state, setState] = useState({ name: '코카콜라', count: 0 });

...
setState(prev => ({ ...prev, count: prev.count + 1 }));
...

불변 객체로 다루지 않았을 때 발생할 수 있는 이슈?

  • React는 Props와 State의 변경을 불변성을 이용해 감지하고 리렌더링을 하는데 불변 객체로 다루지 않는다면 원하는 리렌더링이 발생하지 않는다.
  • 여러 곳에서 불변 객체가 아닌 객체를 사용한다면 객체의 값이 예상할 수 없는 값이 되어 엉망이 될 것이다.
  • setState는 비동기적으로 state를 변경 시키는데 불변 객체로 다루지 않고 직접 state를 변경 시킨다면 이전의 값이 반환될 수 있다.

 

😮 하위 컴포넌트에서 상위 컴포넌트의 상태인 Props를 직접 수정할 수 없는 이유는 무엇일까요?

props가 변경되면 리렌더링이 되는데 하위 컴포넌트가 상위 컴포넌트의 상태인 props를 직접 수정한다면 예상하지 못한 렌더링이 발생하게 됩니다.

 

 

😮 Prop Drilling을 해결할 수 있는 방법은 Context API 혹은 Redux 같은 State Container와 Store Management 뿐일까요?

컴포넌트 합성과 children prop을 사용하여 Prop Drilling을 해결할 수 있다.

 

 


합성 (Composition) vs 상속 (Inheritance) - React

 

합성 (Composition) vs 상속 (Inheritance) – React

A JavaScript library for building user interfaces

ko.reactjs.org

불변 객체와 immer

 

불변 객체와 immer

불변 객체가 뭘까?

ui.toast.com

React와 불변객체

 

React와 불변객체

불변객체(Immutable Object)의 개념과 React에 그 개념을 적용했을 때 어떤 이점을 얻을 수 있는지 소개합니다.

blog.coderifleman.com

 

'React.js' 카테고리의 다른 글

[React] Ref(React.createRef, ref attribute, useRef)  (0) 2022.06.18
[React] State의 모든 것(feat.batch)  (2) 2022.06.15
[React] Key  (0) 2022.06.15
[React] VirtualDOM  (0) 2022.06.15
[React] JSX  (0) 2022.06.15
    'React.js' 카테고리의 다른 글
    • [React] Ref(React.createRef, ref attribute, useRef)
    • [React] State의 모든 것(feat.batch)
    • [React] Key
    • [React] VirtualDOM
    FE코크
    FE코크
    공부한 내용을 적는 블로그

    티스토리툴바