Advertisement
fabiobiondi

React Pro - Real World App - Ch7. 09. Redirect dopo il login con useEffect

Mar 17th, 2023
688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { ServerError } from '@/shared/';
  2. import { ChangeEvent, FormEvent, useEffect, useState } from 'react';
  3. import { selectAuthError, selectAuthIsLogged, useAuth } from '@/services/auth';
  4. import { useNavigate } from 'react-router-dom';
  5. import { useLogin } from './hooks/useLogin';
  6.  
  7. export function LoginPage() {
  8.   // NEW
  9.   const navigate = useNavigate();
  10.   const error = useAuth(selectAuthError);
  11.   // NEW
  12.   const isLogged = useAuth(selectAuthIsLogged);
  13.   const login = useAuth(state => state.login);
  14.  
  15.   const {
  16.     formData, isValid, changeHandler
  17.   } = useLogin();
  18.  
  19.   // NEW
  20.   useEffect(() => {
  21.     if (isLogged) {
  22.       navigate('/cms')
  23.     }
  24.   }, [isLogged])
  25.  
  26.   function doLogin(e: FormEvent<HTMLFormElement>) {
  27.     e.preventDefault();
  28.     login(formData.username, formData.password)
  29.   }
  30.  
  31.   return (
  32.     <div className="page-sm">
  33.       <h1 className="title">LOGIN</h1>
  34.  
  35.       {error && <ServerError />}
  36.  
  37.       <form className="flex flex-col gap-3" onSubmit={doLogin}>
  38.         <input
  39.           type="text"
  40.           placeholder="username"
  41.           value={formData.username}
  42.           onChange={changeHandler}
  43.           name="username"
  44.         />
  45.         <input
  46.           type="password"
  47.           placeholder="password"
  48.           value={formData.password}
  49.           onChange={changeHandler}
  50.           name="password"
  51.         />
  52.         <button disabled={!isValid} className="btn primary" type="submit">SIGN IN</button>
  53.       </form>
  54.  
  55.       <pre>{JSON.stringify(formData, null, 2)}</pre>
  56.     </div>
  57.   )
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement