react-hot-toast
reference: https://react-hot-toast.com/docs/toast
useToast 컴포넌트를 만든다.
// useToast.jsx
import React, { useCallback } from 'react';
import toast, { Toaster } from 'react-hot-toast';
export function useAsyncToast() {
const asyncToast = useCallback((resultPromise, data, messages) => {
toast
.promise(
resultPromise,
{
loading: messages.loading,
success: messages.success(data),
error: (err) => messages.error(err),
},
{
style: {
marginLeft: '300px',
minWidth: '250px',
},
}
)
.catch((err) => {
console.log(err);
});
}, []);
return { asyncToast };
}
export function ToastContainer() {
return <Toaster position="bottom-center" reverseOrder={true} />;
}
useAsyncToast를 사용하고자 하는 컴포넌트에 Import하고 비동기 함수를 변수로 지정하고 asyncToast의 인자로 보낸다.
import React, { useState } from 'react';
import { useCookies } from 'react-cookie';
...
import { useLogoutKakaoMutation } from '../../redux/features/kakaoLogin';
import { useAsyncToast } from '../../hooks/useToast';
function Sidebar({ isOpenLoginModal, setIsOpenLoginModal }) {
const { asyncToast } = useAsyncToast();
const [logoutKakao, { isLoading: isLoadingKakaoLogout }] = useLogoutKakaoMutation();
const handleLogout = () => {
const messages = {
loading: '로그아웃 중...',
success: () => '로그아웃 성공',
error: () => '로그아웃 실패',
};
try {
const logoutResult = logoutKakao(cookies?.airoverflow?.access_token).unwrap();
console.log('logoutResult', logoutResult);
asyncToast(logoutResult, null, messages);
} catch (err) {
console.log(err);
throw err;
}
};
return (
... 생략
);
}
export default Sidebar;
Last updated