Comments (1)
겪은 문제 (타입 지정이 어렵다!)
- hook을 만들 때 ref, handler, event listener 함수 등 type 지정이 어려웠다.
해결방법
- ref는 React.RefObject<Ref를 붙인 엘레먼트의 타입>으로 타입을 지정한다. modal에 붙일 건데 왜
HTMLDivElement
로 지정하지 않았냐면, hook은 재사용을 위한 것이기 때문에HTMLElement
로 충분하다고 생각했기 때문이다. - React의 이벤트 함수는 (ex-onClick)는 event의 타입을
React.MouseEvent
처럼 지정하면 됐는데, vanilla js의 이벤트를 등록할 때 하던대로e: React.MouseEvent
로 타입을 지정했더니 에러가 떴다. vanilla js 이벤트함수의 이벤트는 타입을Event
로 주면 된다. - e에 타입 지정을 해도 e.target에 타입 에러가 뜬다. event에도 타입 지정을 해주고, target도 따로 변수로 빼서 HTMLElement 계열로 타입 지정을 해주면 된다.
// useOnClickOutside.ts
import React, { useEffect } from 'react';
const useOnClickOutside = (
ref: React.RefObject<HTMLElement>,
handler: Function
) => {
useEffect(() => {
const listener = (e: Event) => {
const target = e.target as HTMLElement;
if (ref.current && !ref.current.contains(target)) {
handler();
}
};
document.addEventListener('mousedown', listener);
document.addEventListener('touchstart', listener);
return () => {
document.removeEventListener('mousedown', listener);
document.addEventListener('touchstart', listener);
};
}, [ref, handler]);
};
export default useOnClickOutside;
// CardDetailPage.tsx 중 일부
const modalRef = useRef<HTMLDivElement>(null);
const navigate = useNavigate();
const goBack = () => {
navigate('/cards');
};
useOnClickOutside(modalRef, goBack);
from phoca-review.
Related Issues (20)
- API document에 맞게 백엔드의 필드 구조와 로직을 수정한다.
- API 요청을 위한 환경설정을 한다.
- 카드 create API에 요청을 보내 카드를 생성하는 기능을 구현한다. HOT 2
- 앨범에 카드 정보를 불러와 렌더링하고 넘겨볼 수 있게 한다. HOT 1
- GET cards를 할 때 총 몇 개의 카드가 존재하는지 서버에서 값을 보내주도록 한다. HOT 1
- 앨범에서 카드를 클릭하면 카드 상세정보 페이지가 모달로 뜨게 라우팅 및 마크업을 한다.
- 앨범에서 카드를 누르면 상세정보를 조회할 수 있다.
- 카드 상세페이지에서 카드 뒤집기 기능을 추가한다. HOT 1
- 카드 수정 페이지를 만들고 저장된 카드 정보를 불러와 화면에 보여준다.
- Card Class를 만들어 submit 데이터를 만드는 과정을 추상화한다.
- 서버의 카드 update API에 발생하는 에러를 수정하고, update 페이지의 제출 버튼에 API 요청을 바인딩한다. HOT 1
- 카드 삭제를 확인하는 모달창을 마크업 하고, 모달창이 닫히는 기능을 구현한다.
- 카드 삭제 버튼을 누르면 카드 삭제 API에 요청하는 기능을 추가한다.
- 카드 삭제 후 메인으로 이동되었을 때 Book의 카드 목록에 삭제가 반영 안되는 문제 해결 HOT 1
- 카드 상세 페이지에서 카드를 이미지로 다운받을 수 있는 기능을 추가한다. HOT 1
- 카드 fetch 함수에서 페이지 가공하는 로직을 함수로 분리하고, 데이터를 알맞은 state 변수에 담도록 고친다.
- 카드 에디터 화면을 벗어나려고 하면 경고해주는 기능을 추가하자. HOT 1
- 페이지 전환 시 애니메이션 효과를 준다.
- 카드 에디터를 반응형 디자인으로 개선한다.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phoca-review.