[TIL] props

이현동·2023년 2월 8일
0

TIL

목록 보기
26/59
post-custom-banner

정의

컴포넌트 끼리의 정보교환 방식!

부모 컴포넌트가 자식 컴포넌트에게 물려준 데이터에요! 다시 말해, 컴포넌트 간의 정보 교류 방법이다.

  1. props는 반드시 위에서 아래 방향으로 흐른다. 즉, [부모] → [자식] 방향으로만 흐른다==(단방향)==
  2. props는 반드시 읽기 전용으로 취급하며, 변경하지 않는다.

코드로 보기

// src/App.js
import React from "react";

function App() {
	return <GrandFather />;
}

function GrandFather() {
	return <Mother />;
}

function Mother() {
	const name = '홍부인';
	return <Child motherName={name} />; // 💡"props로 name을 전달."
}

function Child(props) {
	console.log(props) // {motherName: '흥부인'} 출력
	return <div>연결 성공</div>;
}

export default App;

사용 방법

1. 하위 컴포넌트에 값을 전달할 때 사용

import Component from './Component';

function Sample() {
  const text = '항해 12기 화이팅';

  return (
      <Component text={text}/> /* 항해 12기 화이팅 */
  );
}

function Component(props) {
  return (
      <div>{props.text}</div>
  );
}

2. defaultProps

  • defaultProps는 props 값을 따로 지정하지 않았을 때 설정하는 기본값
  • 하위 컴포넌트에 전달되는 props가 없을 때 defaultProps를 설정하여 값을 지정할 수 있음
import Component from './Component';

function Sample() {

  return (
    <React.Fragment>
      <Component/>
    </React.Fragment>
  );
}

function Component(props) {
  return (
    <React.Fragment>
      <div>{props.text}</div> /* 디폴트 값입니다. */
    </React.Fragment>
  );
}

Component.defaultProps = {
	text: '디폴트 값입니다.'
};

3. children

  • props의 children을 사용하면 컴포넌트 태그 사이의 내용을 보내줄 수 있음
import Component from './Component';

function Sample() {
	const text = '12기 a반';

  return (
    <React.Fragment>
      <Component text={text}>항해 99 12</Component>
    </React.Fragment>
  );
}

function Component(props) {
  return (
    <React.Fragment>
      <div>{props.text}</div> /* 12기 a반 */
			<div>{props.children}</div> /* 항해 99 12기 */
    </React.Fragment>
  );
}

4. props destructuring (구조 분해 할당)

  • ES6의 비구조화 할당을 사용하면 props 객체의 값을 추출하여 사용할 수 있음
  • 비구조화 할당은 함수형 컴포넌트에서 많이 사용
function Component(props) {
	const {name, children} = props; // 구조를 분해해서 변수에 담아 사용

  return (
    <React.Fragment>
      <div>{text}</div>
			<div>{children}</div>
    </React.Fragment>
  );
}

5. prop-types

  • 컴포넌트 props의 타입이나 필수값을 지정할 때 사용
import PropTypes from 'prop-types';

function Component(props) {
  const {num, text, children} = props;

  return (
    <React.Fragment>
      <div>{text}</div>
			<div>{children}</div>
			<div>{num}</div>
    </React.Fragment>
  );
}

Component.propTypes = { // 타입을 지정
  text: PropTypes.string.isRequired,
  num: PropTypes.number
};

주의점

  • props가 Types에서 지정한 타입과 일치하지 않으면 에러 발생
  • 필수값으로 지정된 props를 전달하지 않을 경우에도 에러 발생
  • 따라서 propTypes를 사용한 경우엔 타입과 필수로 설정된 props에 유의하여 사용

prop drilling

정의

prop drilling이란 부모컴포넌트에서 자식 컴포넌트, 그 자식의 컴포넌트 ...
부모 → 자식 → 그 자식 → 그자식의 자식 ...
위와 같이 데이터를 계속 뚫고 내려가는 것을 말한다.

문제점

prop 전달이 3~5개 정도의 스코프인 프로젝트에서는 크게 문제가 되지 않지만 prop 전달이 10번, 20번 정도 더 많은 과정을 거치게 되면 prop추적이 힘들게 되고 그에 따라 유지보수가 더욱 어려워지게 된다.

해결방법

전역 상태 관리 라이브러리 사용

reduxMobXrecoil 등을 사용하여 해당 값이 필요한 컴포넌트에서 직접 불러서 사용하기

profile
https://hdlee.dev
post-custom-banner

0개의 댓글