본문 바로가기
React

[React] Component 합성과 추출

by BeomBe 2024. 1. 26.
반응형

1. Component 합성

Component 안에 또 다른 Component를 쓸 수 있어 복잡한 화면을 여러개의 Component로 나눠서 구현 가능

 

App Component안에 세 개의 Welcome Component를 생성

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

function App(props) {
    return (
        <div>
            <Welcome name="Kyle"/>
            <Welcome name="Jane"/>
            <Welcome name="Peter"/>
        </div>
    )
}

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

 

2. Component 추출

- 큰 Component를 조각내어 새로운 Component를 생성

- 재사용성, 개발속도 증가에 좋음

 

아래의 Component를 여러개의 Component로 추출해보겠습니다.

function Comment(props) {
    return (
        <div className="comment">
            <div className="user-info">
                <img className="image"
                    src={props.user.imageUrl}
                    alt={props.user.name}
                />
                <div className="user-info-name">
                    {props.user.name}
                </div>
            </div>
            
            <div className="comment-text">
                {props.text}
            </div>
            
            <div className="comment-date">
                {formatDate(props.date)}
            </div>
        </div>
    );
}

props = {
    user: {
        name: "Kyle",
        imageUrl: "https://localhost/images/...",
    },
    text: "HiHi",
    date: Date.now(),
}

 

2-1. Image Component

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

 

2-2. User Component

function UserInfo(props){
    return (
        <div className="user-info">
            <Image user={props.user} /> // Image Component 사용
            <div className="user-info-name">
                {props.user.name}
            </div>
        </div>
    );
}

 

User Component를 사용하여 메인 코드를 변경하면,

즉, Comment Component > UserInfo Component > Image Component

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

'React' 카테고리의 다른 글

[React] Hook  (3) 2024.02.01
[React] State와 Lifecycle  (1) 2024.02.01
[React] Component 만드는법 및 렌더링  (4) 2024.01.25
[React] Component 와 Props 의 정의  (4) 2024.01.25
[React] Elements 란?  (2) 2024.01.25