react 수업

13.Composition, Inheritance

gongmille 2024. 9. 7. 15:13

-Composition?

여러개의 컴포넌트를 합쳐서 새로운 컴포넌트를 만드는 것 = 합성

 

- Composition 사용 방법

1.Contatinment 

하위 컴포넌트를 포함하는 합성 방법. Children prop을 사용해서 조합한다.

function FancyBorder(props){
	return (
    	<div classname={'FancyBorder FancyBorder-' + props.color}>
        	{props.children}
        </div>
    );
}

function WelcomeDialog(props){
	return (
    	<FancyBorder color="blue">
        	<h1 className="Dialog-title"> 어서오세요
            </h1>
            <p className="Dialog-message">사이트 방문을 환영합니다
            </p>
        </FancyBorder>
    );
}

예시 - WelcomeDialog함수 안 FancyBorder 태그 안에 있는 h1,p 태그가 FancyBorder 함수 안 props.children 부분에 표출된다.

 

function SplitPane(props){
	return (
    	<div className="SplitPane">
        	<div className="SplitPana-left">{props.left}</div>
            <div className="SplitPana-right">{props.right}</div>
        </div>
    );
}

function App(props){
	return (
    	<SplitPane left={ <Contacts /> } right={ <Chat /> } />
    );
}

예시-화면분할 코드. 여러개의 children 집합이 필요한 경우 별도의 props를 정의해서 사용한다.

 

2.Specializtion

범용적인 개념을 구별이 되게 구체화 하는 것.

function FancyBorder(props){
	return (
    	<div classname={'FancyBorder FancyBorder-' + props.color}>
        	{props.children}
        </div>
    );
}

function Dialog(props){
	return (
    	<FancyBorder color="blue">
        	<h1 className="Dialog-title"> {props.title}
            </h1>
            <p className="Dialog-message"> {props.message}
            </p>
        </FancyBorder>
    );
}
function WelcomeDialog(props){
	return (
    	<Dialog title="어서오세요" message="사이트 방문을 환영합니다" />
    );
}

예시 

 

-Inheritance?

다른 컴포넌트로부터 상속받아서 새로운 컴포넌트를 만드는 것. 따로 추천 사례가 없다.

 

-실습

function Card(props){
    const {title, backgroundColor, children} = props;
    console.log(backgroundColor)
//backgroundColor: backgroundColor || "white"
//{title && <h1>{title}</h1>}
//Specializtion

//children - Conteinment
    return (
        <div style={{margin:8, padding: 8, borderRadius: 8, 
            boxShadow: "0px 0px 4px grey", backgroundColor: backgroundColor || "white"}}>
            {title && <h1>{title}</h1>}
            {children}
        </div>
    );
}


export default Card;

Card.jsx

 

import Card from "./Card";

function ProfileCard(props){
    return (
        <Card title="Inje Lee" backgroundColor="#4ea04e">
            <p>안녕하세요</p>
            <p>잘 부탁드립니다</p>
        </Card>
    );
}

export default ProfileCard;

PropfileCard.jsx

 

(index.js 생략)

 

 

그러면 위와 같이 나온다.

 

'react 수업' 카테고리의 다른 글

15. styling  (0) 2024.09.10
14. context  (0) 2024.09.09
12. lifting state up  (0) 2024.09.07
11. forms  (1) 2024.09.05
10.List, key  (0) 2024.09.05