Component Hierarchy (컴포넌트 계층구조)
컴포넌트의 장점: 하나의 컴포넌트가 다른 컴포넌트를 포함할 수 있다.
즉 부모-자식 관계가 될 수 있다.
props란?
properties의 준말로 부모 컴포넌트->자식 컴포넌트로 데이타를 보내주는 역할을 한다.
<Child name="aerirang" >
<Child name="aeri" age=13 >
//props는 객체 형태의 데이터
props = {
name: "aerirang",
age: 30
}
리액트에서 props를 통해 컴포넌트 간에 상호작용하는 2가지
props 사용 예시
children.js
import React, { Component } from "react";
import { withRouter } from "react-router-dom";
import "./Children.scss";
import Person from "./Person";
export class Children extends Component {
render() {
return (
<div className="Children">
<h1>React Children</h1>
<hr />
<section className="card-section">
<Person
name="arirang"
email="arirang@wecode.com"
position="student"
/>
<Person
name="aerirang"
email="aerirang@wecode.com"
position="Frontend dev"
/>
<Person
name="aripark"
email="aripark@wecode.com"
position="teacher"
/>
</section>
</div>
);
}
}
export default withRouter(Children);
Children이라는 부모 컴포넌트가 있고 Person이라는 3개의 children컴포넌트가 포함되어 있다.
Person컴포넌트에는 name, email, position이라는 세가지 props가 있다.
세가지 props를 통해 부모 컴포넌트에서 자식 컴포넌트에세 정보를 전달하고 있다.
Person.js
import React, { Component } from "react";
import "./Person.scss";
export class Person extends Component {
render() {
return (
<div className="Person">
<div className="name">{this.props.name}</div>
<div className="detail">
<div>{this.props.email}</div>
<div>{this.props.position}</div>
</div>
</div>
);
}
}
export default Person;
children.js
// Children.js - 부모 컴포넌트
import React, { Component } from "react";
import { withRouter } from "react-router-dom";
import Person from "./Person";
import ApprovalCard from "./ApprovalCard";
import "./Children.scss";
export class Children extends Component {
render() {
return (
<div className="Children">
<h1>React Children</h1>
<hr />
<section className="card-section">
<ApprovalCard>
<Person
name="arirang"
email="arirang@wecode.com"
position="student"
/>
</ApprovalCard>
<ApprovalCard>
<Person
name="aerirang"
email="aerirang@wecode.com"
position="frontend dev"
/>
</ApprovalCard>
<ApprovalCard>
<Person
name="aripark"
email="aripark@wecode.com"
position="teacher"
/>
</ApprovalCard>
</section>
</div>
);
}
}
export default withRouter(Children);
props = {
children: <Person />
}
ApprovalCard.js
// ApprovalCard.js - this.props.children
import React, { Component } from "react";
import "./ApprovalCard.scss";
export class ApprovalCard extends Component {
render() {
console.log("this.props: ", this.props);
return (
<div className="ApprovalCard">
<div className="top">{this.props.children}</div>
<div className="bottom">
<div className="btn cancel">Decline</div>
<div className="btn okay">Approve</div>
</div>
</div>
);
}
}
export default ApprovalCard;
효율적이도, 재사용할 수 있다.