티스토리 뷰
input 체크박스를 클릭하면 onClick이벤트가 2번 발생하는 이유
input checkbox를 커스텀해서 체크박스를 구현했다.
체크박스를 선택하면 해당 체크박스에 해당하는 쿼리스트링이 쿼리스트링을 관리하는 배열에 들어가는데 한 번 클릭했는데 2번씩 들어갔다. React.StrictMode 때문인가 싶어서 없애고 클릭해봐도 계속해서 2번 들어갔다.
...
<List onClick={getOptions}>
<input
id={text}
name={text}
type='checkbox'
checked={checked.filter((el) => el.name === text)[0].checked}
readOnly
/>
<span className='checkbox' onClick={handleCheck}>
<FontAwesomeIcon icon={faCheck} className='check' />
</span>
<label htmlFor={text} onClick={handleCheck}>
{text}
</label>
</List>
...
대략적인 구조는 이렇게 되는데 자꾸 onClick 이벤트가 2번 발생했다. 검색을 해봐도 strict 모드를 때문이다라고 나와서 결국 영어로 검색하다가 왜 그런지 이유를 찾았다. 영어를 못해도 영어 검색을 생활화하자...🥲
label태그와 input태그는 연결되어있어서 label태그를 클릭하면 클릭이 2번 발생하는 html 자체의 문제였다. 그래서 2번 발생하는 이벤트를 막기 위해서 e.preventDefault()로 막아줬더니 정상적으로 1번만 들어갔다.
빈 객체 확인하기
const obj = {};
Object.keys(obj).length === 0
Date객체 복사하기
const date = new Date();
const copiedDate = new Date(date.getTime());
투명도가 있는 hex코드 사용하기
hex는 투명도를 줄 수 없는 줄 알았는데 자릿수를 늘리면 투명도를 가진 채로 사용할 수 있다.
#00000099;
scrollTo 속도 조절
스크롤 탑버튼을 구현할 때 scrollTo를 사용했는데 속도가 조금 더 빨랐으면 좋겠어서 찾아봤는데 속도 조절은 불가능하다고 한다. 짧은 페이지는 느리게 올라오지만 긴 페이지는 좀 빨리 올라오는 것 같아서 위안을 삼기로 했다. 하지만 나중에 메소드에 속도 조절 속성도 추가해줬으면 좋겠다.
const handleScrollTop = () => {
window.scrollTo({
top: 0,
behavior: 'smooth',
});
};
객체를 props로 넘겨줬을 때 구조분해할당
// 부모 컴포넌트
...
const obj = {
id: 1,
greeting: hi
}
...
<Sample obj={obj} />
// 자식 컴포넌트
const Sample = ({obj}) => {
return <h1>{greeting}</h1>
}
이렇게 객체를 통째로 props로 넘겨주고 소괄호 안에서 구조 분해 할당을 했다. 이렇게 이용하려고 하는데 자꾸 안돼서 생각을 해보니 객체를 통째로 넘겨줬으면 구조분해할당을 해도 한번 더 해야 되는데 착각해서 한참 동안 시간을 썼다. 사람이 졸리면 멀쩡한 사고가 불가능하니 그럴 땐 억지 부리지 말고 자야 한다는 걸 느꼈다...🥲
// 자식 컴포넌트
const Sample = ({obj}) => {
return <h1>{obj.greeting}</h1>
}
// or
const Sample = ({obj}) => {
const {id, greeting} = obj;
return <h1>{greeting}</h1>
}
'TIL' 카테고리의 다른 글
TIL 221101 타입스크립트는 불만이 많아~ (0) | 2022.11.01 |
---|---|
TIL 221012 옛날에 만든 투두리스트 프로젝트 뜯어보기 (1) | 2022.10.12 |
TIL 220915 새롭게 알게 된 CSS + etc. (0) | 2022.09.15 |
TIL 220908 서버 설치하면서 발견한 오류들 (0) | 2022.09.09 |
TIL 220901 화면구현 하면서 배운 이것저것 (0) | 2022.09.02 |
- Total
- Today
- Yesterday
- Python
- 제이쿼리
- scss
- 구름에듀
- CSS
- 자바스크립트
- vscode
- 타입스크립트
- 스파르타코딩클럽
- 리액트
- Typescript
- 드림코딩
- map
- 코드잇
- TS
- 파이썬
- Til
- 회고
- 김버그
- 저스트코드
- js
- git
- 코딩앙마
- 깃
- 비주얼스튜디오코드
- html
- vue
- 제로초
- React
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |