개발 공부한 내용 정리/React
React- SASS로 컴포넌트 스타일링- ...rest props 전달하기
프로그램 탐험가
2020. 10. 6. 22:45
※ 강의를 듣고 제가 이해한 내용을 바탕으로 정리한 것이라서 오류가 있을 수 있습니다.
...rest props 전달하기
App.js
import React from 'react';
import Button from './components/Button';
import './App.scss';
function App() {
return (
<div className="App">
<div className="buttons">
<Button size="small" outline={true}>BUTTON</Button> {/* outline을 true로 설정*/}
<Button color="gray" outline={true}>BUTTON</Button>
<Button color="pink" size="large" outline={true}>BUTTON</Button>
</div>
<div className="buttons">
<Button size="large" fullWidth={true}>BUTTON</Button> {/* fullWidth를 true */}
<Button color="gray" size="large" fullWidth={true}>BUTTON</Button>
<Button
color="pink"
size="large"
fullWidth={true}
onClick={ () => {
console.log('클릭!');
}}
onMouseMove={ () => {
console.log('마우스 무브!');
}}
>
BUTTON
</Button>
</div>
</div>
);
}
export default App;
위 코드에서 핑크색 버튼 컴포넌트에 onClick 이벤트와 onMouseMove 이벤트를 설정해 주었는데
components/Button.js
import React from 'react';
import classNames from 'classnames';
import './Button.scss';
// size: large, medium, small
// color: blue, pink, gray
function Button({ children, size, color, outline, fullWidth, ...rest }) { // ...rest를 사용하면 앞의 props를 제외한 다른 모든 것을 resst로 받아옴
console.log(rest);
return <button className={classNames('Button', size, color, {
outline, // 조건으로 true, false의 블리언 형태로 오기 때문에 객체 형태로 props 넣어줌
fullWidth // 특별히 기본값을 지정할 필요는 없다. 기본값을 지정안해도 값이 undefined이기 때문에 처리가 되지 않는다.
})}
{...rest} // button에 전달해줄 때도 ...rest로 해주면 된다. (rest 객체 안에 있는 모든 것들을 설정해주겠다는 의미)
>
{children}
</button>; // button.scss에 size, color props 값 전달
}
Button.defaultProps = { // size props 기본값으로 medium
size: 'medium',
color: 'blue' // color 기본값으로 blue
};
export default Button;
매번 이벤트를 설정해줄 때 마다 일일히 props에 각각의 이벤트를 넣어주는 것은 귀찮은 일인데
...rest는 위 코드를 예로 들었을 때 children, size, color, outline, fullWidth를 제외한 모든 다른 props를 받아온다. 그러므로 아주 편리하다.
그리고 그것을 버튼에 전달해 줄 때에도 ...rest로 전달해주면 된다.
그러면 rest안에 있는 모든 props들은 버튼에 전달이 된다.
실행 결과
브라우저 콘솔 창에 잘 출력 되는 것을 볼 수 있다.