반응형
MUI 기반 컴포넌트로 작업 중 난관에 봉착
1. 문제
<ClickAwayListener onClickAway={onClose} >
<Box>
// .. code
<Select
...code
value={0}
onChange={e => console.log(e)}
/>
</Box>
</ClickAwayListener>
<Box/> 컴포넌트 외 영역을 클릭하면 <Box/>가 사라지도록 하기 위해 <ClickAwayListener/> 컴포넌트를 사용했다.
문제는 Select 박스를 클릭해서 열고 메뉴를 클릭하는 순간
<ClickAwayListener/>의 onClickAway가 실행되면서 <Box/>가 사라져 버린 것.
2. 원인
<Select/>가 open상태일 때 보이는 메뉴 박스는 <Box/> 컴포넌트 외부에 생성되기 때문
3. 해결
<ClickAwayListener/>에 mouseEvent={'onMouseUp'} prop을 추가해주면 된다!default가 onClick이다보니 Select 박스를 클릭하는 순간 onClickAway도 실행되면서 Box가 닫힌다.그래서 클릭이 아닌 onMouseUp 되는 순간 onClickAway가 실행되도록 하면Select 박스에 영향이 없다~
<ClickAwayListener onClickAway={onClose} mouseEvent={'onMouseUp'} >
<Box>
// .. code
<Select
...code
value={0}
onChange={e => console.log(e)}
/>
</Box>
</ClickAwayListener>
12월 6일 수정
바보.. <- 그냥 MenuProps에 disablePortal true 값을 주면 된다..^^ㅋ
<ClickAwayListener onClickAway={onClose}>
<Box>
// .. code
<Select
...code
value={0}
onChange={e => console.log(e)}
MenuProps={{ disablePortal: true }} <--- 추가
/>
</Box>
</ClickAwayListener>
반응형
'📍 Front-End > 🜸 React.js' 카테고리의 다른 글
React i18n :: key에 콜론(:)이 있을때 (0) | 2023.01.26 |
---|---|
리액트에서 컴포넌트의 높이(height), 넓이(width) 구하기 (0) | 2023.01.25 |
[React] 리액트에서 input autocoplete 끄기 (0) | 2022.09.15 |
[React] CRA없이 React+ Typescript + Webpack + babel 환경 구성하기 - 2022.06.05 기준 (2) | 2022.06.05 |
[React/리액트] Fragment(<></>)에 key 추가하기 (불필요한 element 생성을 막자!) (0) | 2022.05.24 |
댓글