일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Carousel
- vite
- 리액트
- ㅡ
- alias설정
- 조건부스타일
- accordian
- BlockFormattingContext
- 제어컴포넌트
- debouncing
- es6
- 문제해결
- CustomHook
- 화살표2개
- createPortal
- ?? #null병합연산자
- QueryClient
- BFC
- 부모요소의 패딩 무시
- 함수형프로그래밍
- twoarrow
- react
- ignore padding
- 서초구보건소 #무료CPR교육
- transition
- tailwindCSS
- DOM
- parent padding
- useQueryClient
- 부모패딩
Archives
- Today
- Total
프론트엔드 첫걸음
props.children 사용하여 Wrapper Component 분리하기 본문
- 각 컴포넌트를 감싸는 div 태그에 공통적으로 적용되는 css를 가진 Card라는 래퍼컴포넌트를 만들어서
div를 대체할 수 있다.
래퍼컴포넌트 적용 전
return (
<div className='expenses'>
<ExpensesList items={filteredExpenses} />
</div>
);
Card.css
.card {
border-radius: 12px;
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.25);
}
- 해당 css는 Card가 대체할 것 이므로 Card가 외부에서 받는 클래스로 적용되는 css를 수정한다.
(expenses.css에서 위 스타일링을 제거)
Card.jsx
import React from 'react';
import '../UI/Card.css';
const Card = (props) => {
const classes = 'card ' + props.className; //외부에서 받은 className추가
return <div className={classes}> {props.children}</div>;
};
export default Card;
- props.children으로 <Card> 태그 안에 들어갈 것들을 받는다.
Wrapper안에 들어간 컴포넌트는 props.children으로 사용가능하다. - 그리고 Card 컴포넌트가 외부에서 받은 className(여기서는 expenses)을 props으로 받아서
Card 내부 div 태그의 className으로 넘긴다.
래퍼컴포넌트 적용 후
return (
<Card className='expenses'>
<ExpensesList items={filteredExpenses} />
</Card>
);
컴포넌트에서 다른 컴포넌트를 담기
어떤 컴포넌트들은 어떤 자식 엘리먼트가 들어올 지 미리 예상할 수 없는 경우가 있습니다. 범용적인 ‘박스’ 역할을 하는 Sidebar 혹은 Dialog와 같은 컴포넌트에서 특히 자주 볼 수 있습니다.
이러한 컴포넌트에서는 특수한 children prop을 사용하여 자식 엘리먼트를 출력에 그대로 전달하는 것이 좋습니다.
https://ko.reactjs.org/docs/composition-vs-inheritance.html
'개발 공부 > React' 카테고리의 다른 글
리액트 라우터 사용하기 (0) | 2022.07.19 |
---|---|
리액트 이미지 넣기 (0) | 2022.07.19 |
데이터를 자식컴포넌트에서 부모컴포넌트로 보내기 (0) | 2022.07.15 |
함수형 setState 업데이트 (0) | 2022.07.14 |
PureComponent와 memo (0) | 2022.06.28 |