일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 비전공자 개발
- 주식과채권
- 비전공자개발자
- 하버드MBA
- devlift
- 국내수출
- 경제학기초
- 코딩
- 문과 개발
- 개발자
- 9급경제학
- 파생상품
- 경제학
- case method
- 금융기초
- 파생경제학
- 경제학적설명
- 배열메소드
- 주식기초
- 파생금융
- 케이스메소드
- 개발자되기
- 콜드콜
- 바닐라자바스크립트
- 채권기초
- 자바스크립트
- 경제학적기초지식
- 7급경제학
- 비전공자 코딩
- 경제학적개념
- Today
- Total
deVSner
리액트 기초 - Component와 Props 본문
컴포넌트를 통해 UI를 재사용 가능한 개별적인 여러 조각으로 나누고, 각 조각을 개별적으로 살펴볼 수 있습니다
개념적으로 컴포넌트는 JavaScript 함수와 유사합니다. “props”라고 하는 임의의 입력을 받은 후, 화면에 어떻게 표시되는지를 기술하는 React 엘리먼트를 반환합니다.
!!! 리액트 엘리먼트를 반환한다!!!
1. 함수 컴포넌트와 클래스 컴포넌트
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
이 함수는 데이터를 가진 하나의 “props” (props는 속성을 나타내는 데이터입니다) 객체 인자를 받은 후 React 엘리먼트를 반환하므로 유효한 React 컴포넌트입니다
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
2. 컴포넌트 렌더링
const element = <div />;
이전까지는 React 엘리먼트를 DOM 태그로 나타냈습니다.
const element = <Welcome name="Sara" />;
React 엘리먼트는 사용자 정의 컴포넌트로도 나타낼 수 있습니다.
React가 사용자 정의 컴포넌트로 작성한 엘리먼트를 발견하면 JSX 어트리뷰트와 자식을 해당 컴포넌트에 단일 객체로 전달합니다. 이 객체를 “props”라고 합니다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root')
);
이 예시에서는 다음과 같은 일들이 일어납니다.
1. <Welcome name="Sara" /> 엘리먼트로 ReactDOM.render()를 호출합니다.
2. React는 {name: 'Sara'}를 props로 하여 Welcome 컴포넌트를 호출합니다.
3. Welcome 컴포넌트는 결과적으로 <h1>Hello, Sara</h1> 엘리먼트를 반환합니다.
4. React DOM은 <h1>Hello, Sara</h1> 엘리먼트와 일치하도록 DOM을 효율적으로 업데이트합니다.
3. 컴포넌트 합성
컴포넌트는 자신의 출력에 다른 컴포넌트를 참조할 수 있습니다. 이는 모든 세부 단계에서 동일한 추상 컴포넌트를 사용할 수 있음을 의미합니다. React 앱에서는 버튼, 폼, 다이얼로그, 화면 등의 모든 것들이 흔히 컴포넌트로 표현됩니다.
예를 들어 Welcome을 여러 번 렌더링하는 App 컴포넌트를 만들 수 있습니다.
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')
);
4. 컴포넌트 추출
!!!! 함수형 컴포넌트에서 return을 타이핑했으면 () <<< 라는 괄호도 무조건 붙일 것. 이게 덜 헷갈린다
function formatDate(date) {
return date.toLocaleDateString();
}
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>
);
}
const comment = {
date: new Date(),
text: 'I hope you enjoy learning React!',
author: {
name: 'Hello Kitty',
avatarUrl: 'https://placekitten.com/g/64/64',
},
};
ReactDOM.render(
<Comment
date={comment.date} //date={comment.date} << 이게 props가 되는거지
text={comment.text}
author={comment.author}
/>,
document.getElementById('root')
);
- Avatar 추출
function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}
Avatar 는 자신이 Comment 내에서 렌더링 된다는 것을 알 필요가 없습니다.
따라서 props의 이름을 author에서 더욱 일반화된 user로 변경하였습니다.
props의 이름은 사용될 context가 아닌 컴포넌트 자체의 관점에서 짓는 것을 권장합니다.
- Avatar 추출 후 Commet 컴포넌트 확인
function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<Avatar user={props.author} />
<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>
);
}
- UserInfo 컴포넌트 추출
function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
}
- UserInfo 추출 후 Comment 변경 화인
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>
);
}
5. props는 읽기 전용입니다
function sum(a, b) {
return a + b;
}
모든 React 컴포넌트는 자신의 props를 다룰 때 반드시 순수 함수처럼 동작해야 합니다.
function withdraw(account, amount) {
account.total -= amount;
}
'개발 일지 > react (redux, saga)' 카테고리의 다른 글
리액트 기초 - 조건부 렌더링 (0) | 2020.04.14 |
---|---|
리액트 기초 - 이벤트 처리하기 (0) | 2020.04.14 |
리액트 기초 - State와 생명주기 (0) | 2020.04.14 |
리액트 기초 - 엘리먼트 렌더링 (0) | 2020.04.14 |
리액트 기초 - JSX소개 (0) | 2020.04.14 |