Skip to content

Commit

Permalink
feat: ToggleButton 컴포넌트 Controlled로 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
365kim committed May 14, 2021
1 parent 003bea7 commit 8ec2dc9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 14 deletions.
20 changes: 9 additions & 11 deletions src/components/containers/UserLotto/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,21 @@ const initialState = { isToggled: false };

export const UserLotto = (props) => {
const { lottoBundle } = props;
const [isToggled, setLottoBundle] = useState(initialState.isToggled);
const onChangeToggleButton = (e) => setLottoBundle(e.target.checked);
const userLottoListClassname = cx({
UserLotto__list: true,
toggle: isToggled,
});
const [isToggled, setIsToggled] = useState(initialState.isToggled);
const onChangeToggleButton = (e) => setIsToggled(e.target.checked);

return (
<div className="UserLotto">
<ToggleButton onChange={onChangeToggleButton}>번호보기</ToggleButton>
<ToggleButton isToggled={isToggled} onChange={onChangeToggleButton}>
번호보기
</ToggleButton>
<p>
<span className="UserLotto__number">{lottoBundle.length}</span>개 구매하였습니다.
</p>
<ul className={userLottoListClassname}>
{lottoBundle.map((v, i) => (
<li key={i}>
<Lotto numbers={v} />
<ul className={cx('UserLotto__list', { toggle: isToggled })}>
{lottoBundle.map((lotto, index) => (
<li key={index}>
<Lotto numbers={lotto} />
</li>
))}
</ul>
Expand Down
14 changes: 11 additions & 3 deletions src/components/shared/ToggleButton/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,28 @@ import styles from './style.css';
const cx = classNames.bind(styles);

export default function ToggleButton(props) {
const { className, onChange, children, ...rest } = props;
const { containerClassname, className, isToggled, onChange, children, ...rest } = props;

return (
<div className={cx('ToggleButton', className)}>
<div className={cx('ToggleButton', containerClassname)}>
<label className="ToggleButton__label">
<input type="checkbox" className="ToggleButton__input" onChange={onChange} {...rest} />
<input
type="checkbox"
className={cx('ToggleButton__input', className)}
checked={isToggled}
onChange={onChange}
{...rest}
/>
<span className="ToggleButton__text">{children}</span>
</label>
</div>
);
}

ToggleButton.propTypes = {
containerClassname: PropTypes.string,
className: PropTypes.string,
isToggled: PropTypes.bool.isRequired,
onChange: PropTypes.func.isRequired,
children: PropTypes.node,
};

0 comments on commit 8ec2dc9

Please sign in to comment.