Component and Props
1. Components
- React ⏩ Component-Based
- 레그 블록 조립하듯, 컴포넌트들을 모아서 개발
- 예 ) Air-bnb : 컴포넌트를 여러번, 반복적으로 사용해서 하나의 페이지 구성
- Props(입력) ⏩ React component ⏩ React element(출력)
- 기본적으로 JavaScript 함수와 비슷한 로직.
- 어떠한 속성들(Props)를 입력으로 받아서, 그에 맞는 React element들을 생성, 반환한다.
- Component - Element
- 붕어빵틀(Component)과 붕어빵(Element)의 관계
- 객체지향 프로그래밍에서, 클래스와 인스턴스와 비슷
2-0. Props
컴포넌트에 전달할 다양한 정보를 담고있는 자바스크립트 객체
- Property : 속성 ⏩ Property of Components
- '붕어빵틀-붕어빵 비유'에서, 붕어빵에 들어가는 재료를 의미
특징
Read-Only : 읽기 전용 → 값을 변경할 수 없다.
- Element를 생성하는 도중에 변경될 수 없다.
→ 붕어빵을 굽고 있는데, 속재료를 바꿀 수 없듯
Summary
다른 props의 값으로 Element를 생성하기 위해선,
✅ 새로운 값을 Component에 전달하여 Element를 생성해야 한다.
Pure VS. Impure
Pure
- 입력값을 변경하지 않으며,
- 같은 입력값에 대해서는 항상 같은 출력값을 리턴
function sum (a,b) {
return a+b;
}
Impure
- 입력값을 변경 → 입력으로 받은 account 값을 변경
function withdraw(account, amount){
account.total -= amount;
}
All React components must act like pure functions with respect to their props.
모든 리액트 컴포넌트는 그들의 Props에 관해서는 Pure 함수같은 역할을 해야 한다.
Summary
모든 리액트 컴포넌트는 Props를 직접 바꿀 수 없고,
같은 Props에 대해서는 항상 같은 결과를 보여준다.
✅ 같은 Props에 대해선 같은 React Element 리턴
2-1. Props의 사용법
// 📌예제1-1.
function App(props) {
return (
<Profile
name="소플"
introduction="안녕하세요, 소플입니다."
viewCount={1500}
/>
}
- {} : 자바스크립트 코드가 들어간다. → 문자열 외에 정수, 변수, 다른 컴포넌트 등
- Props의 값(value)들이 Profile 컴포넌트에 전달,
- 자바스크립트 객체가 된다.
// 📌예제1-2. 예제1-1의 props 객체
props = { name: "소플", introduction: "안녕하세요, 소플입니다." viewCount: 1500 }
CASE. 속성값으로 Component를 넣은 경우
function App(props) {
return (
<Layout
width={2560}
height={1440}
header={
<Header title="소플의 블로그입니다." />
}
footer={
<Footer />
}
/>
)
}
JSX를 사용하지 않을 경우, 어떻게 Props를 넣어줘야 할까?
✅ createElement()사용
React.createElement(
Profile, // type
{
name:"소플"
introduction:"안녕하세요, 소플입니다."
viewCount:1500
}, // props
null // children
)
🚀 참고
- 처음 만난 리액트(React) , 소플 - 섹션5. Components and Props
- 리액트 공식문서
'React' 카테고리의 다른 글
[React] 조건부 렌더링의 개념 및 구현 (0) | 2022.12.28 |
---|---|
[React] Event의 정의 및 처리 (0) | 2022.12.28 |
[React] Component 생성 및 렌더링, 합성과 추출 (1) | 2022.12.25 |
[React] Rendering Element - React Element, DOM Element (0) | 2022.12.25 |
[React] JSX (0) | 2022.12.25 |
댓글