Closed5
React: Toast表示 - toastifyを使って
モーダルみたいに実装してもいいが今回はライブライを使用
カスタマイズも簡単
上記のように遷移時にもトースト表示させたい場合は_app.tsxに実装する
import 'react-toastify/dist/ReactToastify.css';
import { ToastContainer, Zoom } from 'react-toastify';
function MyApp({ Component, pageProps }: AppProps) {
return (
<ThemeProvider attribute='class'>
<RecoilRoot>
<Auth>
<>
<ToastContainer/>
<Component {...pageProps} />
</>
</Auth>
</RecoilRoot>
</ThemeProvider>
);
}
export default MyApp;
カスタマイズするとこんな感じ↓
(公式参照)
import 'react-toastify/dist/ReactToastify.css';
import { ToastContainer, Zoom } from 'react-toastify';
const contextClass = {
success: 'bg-blue-600',
error: 'bg-red-600',
info: 'bg-gray-700',
warning: 'bg-orange-400',
default: 'bg-black text-white ',
dark: 'bg-white text-gray-600',
};
function MyApp({ Component, pageProps }: AppProps) {
return (
<ThemeProvider attribute='class'>
<RecoilRoot>
<Auth>
<>
<ToastContainer
position='bottom-right'
autoClose={3000}
hideProgressBar={true}
newestOnTop={false}
closeOnClick
rtl={false}
pauseOnFocusLoss
draggable
pauseOnHover
transition={Zoom}
closeButton={false}
toastClassName={() =>
// contextClass[(theme == 'light'? 'default': 'info')] +
contextClass['info'] +
' relative flex p-1 min-h-10 rounded-md justify-between m-2 cursor-pointer'
}
bodyClassName={() => ' flex text-sm font-md block p-3'}
/>
<Component {...pageProps} />
</>
</Auth>
</RecoilRoot>
</ThemeProvider>
);
}
export default MyApp;
ビューは共通化して設定したので、あとは表示させたいコンポーネントでtoastの実装
import { toast } from 'react-toastify';
const completeSignup = async (): Promise<void> => {
setIsOnboarding(false);
try {
toast.success('新規登録が成功しました!');
await router.push('/community');
console.log('complete signup resolved!');
} catch {
(error: any) => console.error(error);
}
};
よき
このスクラップは2021/11/12にクローズされました