user-atom.ts 974 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { atom, getDefaultStore } from "jotai";
  2. interface UserState {
  3. id: string;
  4. username: string;
  5. avatar: string;
  6. token: string;
  7. phone: string;
  8. }
  9. export const userStateAtom = atom<UserState>({
  10. id: '',
  11. username: '',
  12. avatar: '',
  13. token: '',
  14. phone: '',
  15. })
  16. export const setUserStateAtom = atom(null, (get, set, user: UserState) => {
  17. set(userStateAtom, user);
  18. })
  19. export const clearUserStateAtom = atom(null, (get, set) => {
  20. set(userStateAtom, {
  21. id: '',
  22. username: '',
  23. avatar: '',
  24. token: '',
  25. phone: '',
  26. });
  27. })
  28. export const getUserStateAtom = atom((get) => {
  29. return get(userStateAtom);
  30. })
  31. export const updateUserStateAtom = atom(null, (get, set, user: Partial<UserState>) => {
  32. set(userStateAtom, { ...get(userStateAtom), ...user });
  33. })
  34. export const logout = () => {
  35. const store = getDefaultStore()
  36. store.set(clearUserStateAtom)
  37. localStorage.removeItem('token')
  38. }