리액트 4 - Component와 Props

김민찬·2022년 3월 7일
0

React

목록 보기
4/12

오늘 알아볼 것

  • Component
  • Props

Component
재사용이 가능한 각각의 독립된 모듈을 뜻한다.

Props
property의 약자로 부모에게 받아온 데이터이다. 사전적으로 성질, 속성의 의미를 가지고 있다.

함수 컴포넌트와 클래스 컴포넌트

  • 컴포넌트를 정의하는 가장 간단한 방법은 JavaScript 함수를 작성하는 것이다.
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

함수 컴포넌트

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

클래스 컴포넌트

React가 볼 때 위 두가지 유형의 컴포넌트는 동일하다.

컴포넌트 렌더링

React 엘리먼트는 사용자 정의 컴포넌트로도 나타낼 수 있다.

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root'));

컴포넌트의 이름은 항상 대문자로 시작한다.
Element가 소문자로 시작하는 경우에는 div태그와 같이 내장 컴포넌트라는 것을 뜻하기 때문에 컴포넌트는 대문자로 사용한다.

컴포넌트 합성

컴포넌트는 자신의 출력에 다른 컴포넌트를 참조할 수 있다.
이는 모든 세부 단계에서 동일한 추상 컴포넌트를 사용할 수 있다는 것을 의미한다.

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

function App() {
  return (
    <div>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

컴포넌트 추출

컴포넌트를 작게 나눠서 가독성과 재사용성을 높힐 수 있다.

function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <img className="Avatar"
          src={props.author.avatarUrl}
          alt={props.author.name}
        />
        <div className="UserInfo-name">
          {props.author.name}
        </div>
      </div>
      <div className="Comment-text">
        {props.text}
      </div>
      <div className="Comment-date">
        {formatDate(props.date)}
      </div>
    </div>
  );
}

Component를 잘게 쪼개서 작성한다면,

function Avatar(props) {
  return (
    <img className="Avatar"
      src={props.user.avatarUrl}
      alt={props.user.name}
    />
  );
}

function UserInfo(props) {
  return (
    <div className="UserInfo">
      <Avatar user={props.user} />
      <div className="UserInfo-name">
        {props.user.name}
      </div>
    </div>
  );
}

function Comment(props) {
  return (
    <div className="Comment">
      <UserInfo user={props.author} />
      <div className="Comment-text">
        {props.text}
      </div>
      <div className="Comment-date">
        {formatDate(props.date)}
      </div>
    </div>
  );
}

Props는 읽기 전용

컴포넌트의 자체 props를 수정해서는 안된다.

**모든 React컴포넌트는 자신의 props를 다룰 때 반드시 순수 함수처럼 동작해야 한다.

순수함수
어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수

profile
프론트엔드 개발자로 나아가고 있는 김민찬입니다.

0개의 댓글