개발공부/REACT

Props의 특징 및 사용법 [처음 만난 리액트 #16]

sohee! 2023. 1. 31. 00:39

5강. Components and Props

 

[무료] 처음 만난 리액트(React) - 인프런 | 강의

자바스크립트와 CSS 기초 문법과 함께 리액트의 기초를 탄탄하게 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 


Props의 특징

Read-Only 읽기 전용

= 값을 변경할 수 없다

 

● props의 값은 리액트 컴포넌트가 element를 생성하기 위해서 사용하는 값

● 이 값들이 element를 생성하는 도중에 갑자기 바뀌어버리면 제대로 된 element를 생성할 수 없음

● 마치 붕어빵이 다 구워졌는데, 속재료를 바꿀 수 없는 것과 마찬가지

그럼 다른 props의 값으로 element를 생성하려면?

새로운 값을 컴포넌트에 전달하여 새로 Element를 생성

이 과정에서 element가 다시 렌더링 됨

 


JavaScript 함수의 속성

function sum(a, b) {
    return a + b;
}

 

▲ sum 함수 

: a와 b 두 개의 파라미터를 받아서 둘의 합을 리턴하는 함수

 

이 함수에서는 a와 b라는 파라미터의 값을 변경하지 않고,

a, b 파라미터 집합의 값이 같은 경우에는 항상 같은 값을 리턴

=> 이러한 함수를 'Pure'하다고 함 : 입력값(input)을 변경하지 않으며, 같은 입력값에 대해서는 항상 같은 출력값(output)을 리턴

 

 

function withdraw(account, amount) {
    account.total -= amount;
}

 

 withdraw 함수

: account와 amount라는 파라미터를 받아서 account의 total이라는 값에서 amount를 빼는 함수 

  은행 계좌 정보와 총액을 파라미터로 받아서 계좌에 현재 총 잔액을 나타내는 total에서 출금할 금액인 amount를 빼는 것

 

이 함수의 경우 입력으로 받은 파라미터 account의 값을 변경했기 때문에 'Inpure'하다고 함 

 

 


All React components must act like pure functions with respect to their props.

모든 리액트 컴포넌트는 그들의 Props에 관해서는 Pure 함수 같은 역할을 해야 한다.

 

= 모든 리액트 컴포넌트는 Props를 직접 바꿀 수 없고, 같은 Props에 대해서는 항상 같은 결과를 보여줄 것!

 

리액트 컴포넌트는 자바스크립트의 함수와 같은 개념

리액트 컴포넌트의 입력으로 들어오는 props는 자바스크립트 함수의 파라미터와 같음

● 함수가 pure하다는 것은 함수의 입력값인 파라미터를 바꿀 수 없다는 의미를 포함하고 있기 때문에 리액트 컴포넌트에서는 props를 바꿀 수 없음 

● pure 함수는 같은 입력값에 대해서는 항상 같은 결과를 보여줘야 하기 때문에 리액트 컴포넌트 입장에서 같은 props에 대해서는 항상 같은 결과(React Element)를 보여주어야 함 

 


Props 사용법

- JSX를 사용하는 경우

function App(props) {
    return (
        <Profile
            name="소플"
            introduction="안녕하세요, 소플입니다."
            viewCount={1500}
        />
    );
}

 

● JSX를 사용하는 경우 위 코드와 같이 키와 값으로 이루어진 키=값 쌍의 형태로 컴포넌트에 props를 넣을 수 있음

● 이 코드에는 App 컴포넌트가 나오고 그 안에서 Profile 컴포넌트를 사용

● Profile 컴포넌트에 name, introduction, viewCount라는 세 가지 속성을 넣어줌

 

- 각 속성의 값을 넣을 때 중괄호를 사용한 것과 안 사용한 것의 차이

name과 introduction에 들어간 문자열은 중괄호를 사용하지 않았고, viewCount에 들어간 정수는 중괄호를 사용

JSX에서 중괄호를 사용하면 무조건 자바스크립트 코드가 들어감 -> props에 값을 넣을 때에도 문자열 이외의 정수, 변수, 다른 컴포넌트 등이 들어갈 경우에는 중괄호로 감싸주어야 함 

 

{
    name: "소플",
    introduction: "안녕하세요, 소플입니다.",
    viewCount: 1500
}

 

▲ props는 위와 같은 자바스크립트 객체가 됨 

 


function App(props) {
    return (
        <Layout 
            width={2560}
            height={1440}
            header={
                <Header title="소플의 블로그입니다." />
            }
            footer={
                <Footer />
            }
        />
    );
}

 

▲ props의 중괄호를 사용해서 위와 같이 props의 값으로 컴포넌트도 넣을수도 있음 

 

Layout 컴포넌트의 props로는 정수값을 가진 width, height와 리액트 element로 header, footer가 들어오게 됨

 


- JSX를 사용하지 않는 경우

리액트의 createElement 함수

 

React.createElement(
    type,
    [props],
    [...children]
)

 

createElement 함수의 두 번째 파라미터가 props

두 번째 파라미터에 자바스크립트 객체를 넣으면 해당 컴포넌트의 props가 됨 

 

React.createElement(
    Profile,
    {
        name: "소플"
        introduction: "안녕하세요, 소플입니다."
        viewCount: 1500
    },
    null
);

 

▲ Profile 컴포넌트를 JSX를 사용하지 않고 작성한 코드

 

type은 컴포넌트 이름인 Profile이 들어가고, props로 자바스크립트 객체, children에는 null (하위 컴포넌트가 없기 때문)