Front-end/React.js
React material UI 를 이용해 커스텀 드롭다운 만들기
조커린
2020. 1. 21. 14:15
React material UI에서 제공하는 기본적인 UI에서
필요한 기능만 갖고 와서 custom dropdown을 만들어 보았다.
평소에 clickaway listener를 이용하면
요소가 어느 위치에 있던지 외부 클릭 감지가 잘 된다는 것을 깨닫고 구글링 + 필요한 코드 발췌로 만듬!
참고자료 : https://material-ui.com/components/menus/
Menu React component - Material-UI
Menus display a list of choices on temporary surfaces.
material-ui.com
사용법
buttonText : 보여지는 버튼 내부의 텍스트
dropdownitem : 드롭다운 내부의 아이템
<React.Fragment> </React.Fragment> 으로 감싼 후 안에서 for문 돌려서 디자인.
(현재 사이트에서는 내부의 내용이 어떻게 변할지 예상할 수 없어서 props를 사용하지 않았음)
wrapperClass : 전체를 감싸는 div
clickawaylistener : 해당하는 요소의 바깥 영역을 클릭시 리스너 작동
onClickaway로 클릭 감지
open 변수 토글로 메뉴가 켜졌다 꺼졌다
const CustomDropdown = (props) => {
const buttonText = props.buttonText
const dropdownitem = props.dropdownitem
const wrapperClass = props.wrapperClass ? props.wrapperClass : null
const [open, setOpen] = React.useState(false);
const handleClick = () => {
setOpen(prev => !prev);
};
const handleClickAway = () => {
setOpen(false);
};
return (
<> <ClickAwayListener onClickAway={handleClickAway}>
<div className={`dropdown ${wrapperClass}`}>
<button type="button" onClick={handleClick}>
{buttonText}
</button>
{open ? (
<div className="dropdownMenu" onClick={handleClick}>
{dropdownitem}
</div>
) : null}
</div>
</ClickAwayListener>
</>
)
}
export default CustomDropdown
자바스크립트 하드 코딩으로 드롭다운만들다가 API이용하니 너무 깔끔하고 편하다