728x90
반응형
useConfirm, usePreventLeave
useConfirm, usePreventLeave를 간단하게 hooks로 만들어보자
useConfirm 예시 1
버튼 클릭 시 Are you sure 라는 confirm 창이 나오고 확인을 누르면 Delete the world 출력
취소를 누르면 Aborted 출력되는 간단한 함수형 프로그래밍
const useConfirm = (message = "", onConfirm, onCancel) => {
if (!onConfirm && typeof onConfirm !== "function") {
return;
}
if (onCancel && typeof onCancel !== "function") {
return;
}
const confirmAction = () => {
if (confirm(message)) {
onConfirm();
} else {
onCancel();
}
};
return confirmAction;
};
const App = () => {
const deleteWorld = () => console.log("Delete the world");
const abort = () => console.log("Aborted");
const confirmDelete = useConfirm("Are you sure", deleteWorld, abort);
return (
<div className="App">
<button onClick={confirmDelete}>Delete the world</button>
</div>
);
};
usePreventLeave예시 2
Protect 버튼 클릭 시 웹 페이지를 나가려 할때 아래와 같은 메시지를 활성화 시켜줌
Unprotect 클릭 시 아래의 메시지 없음
const usePreventLeave = () => {
const listener = (event) => {
event.preventDefault();
event.returnValue = "";
};
const enablePrevent = () => window.addEventListener("beforeunload", listener);
const disablePrevent = () => window.removeEventListener("beforeunload", listener);
return { enablePrevent, disablePrevent };
};
const App = () => {
const { enablePrevent, disablePrevent } = usePreventLeave();
return (
<div className="App">
<button onClick={enablePrevent}>Protect</button>
<button onClick={disablePrevent}>Unprotect</button>
</div>
);
};
반응형
'프로그래밍 > React' 카테고리의 다른 글
[React] module not found error 해결 방법 (0) | 2023.02.16 |
---|---|
[React] image 확대/축소(라이브러리 사용) (0) | 2023.02.15 |
[React] React Hooks (10) - useNotification (0) | 2023.02.07 |
[React] React Hooks (9) - useFullscreen (0) | 2023.02.06 |
[React] React Hooks (8) - useScroll (0) | 2023.02.03 |