zustand๋ฅผ ์‚ฌ์šฉํ•œ ์œ ์ € ์ •๋ณด ์ „์—ญ ๊ด€๋ฆฌ

2024. 7. 26. 03:56ยทWhat I Learn

โžก๏ธ ๋ฌธ์ œ ์ƒํ™ฉ !

 

๋ฉ”์ธ ํ™”๋ฉด์—์„œ ์œ ์ €์˜ email์„ ์œ ์ € ๋„ค์ž„์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์œ ์ € ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ.

 

1์ฐจ: useState๋กœ 1:1 ๊ด€๋ฆฌ

2์ฐจ: ์ „์—ญ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด store ์ž‘์—…

3์ฐจ: ๋กœ๊ทธ์ธ์ด ๋˜์—ˆ์„ ๋•Œ๋งŒ ์œ ์ €์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ๋ฆฌํŒฉํ† ๋ง


 

1์ฐจ ์‹œ๋„ ->
ํ•„์š”ํ•œ ํŒŒ์ผ๋งˆ๋‹ค useState๋กœ ์œ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ (1:1)

const [userData, setUserData] = useState<User | null>(null)

  useEffect(() => {
    const fetchData = async () => {
      const supabase = createClient()
      const { data: { user }, error } = await supabase.auth.getUser()
      setUserData(user)
    }
    fetchData()
  }, [])

  const email = userData ? userData.email : null

 

์ง€๊ธˆ์€ ํŽ˜์ด์ง€๊ฐ€ ๋ช‡๊ฐœ ์—†์–ด์„œ ๊ดœ์ฐฎ์ง€๋งŒ, ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰ํ•˜๋ฉด ์œ ์ € ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์„œ ๋” ํ•„์š”ํ• ์ง€ ๋ชฐ๋ผ์„œ ์ „์—ญ์—์„œ ๊ด€๋ฆฌํ•ด๋ฒ„๋ฆฌ๊ฒŒ ๋ฃจํŠธ์— ์žˆ๋Š” store ํด๋”์— ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

2์ฐจ ์‹œ๋„ -> (1: N)

๊ตฟ ์ž˜ ๋“ค์–ด์˜จ๋‹ค

// @/store/useUserStore.ts

export const useUserStore = create<UserState>((set) => ({
  user: null,
  fetchUser: async () => {
    const supabase = createClient()
    const { data: { user }, error } = await supabase.auth.getUser()
    /* if (error) ... */
    set({ user })
  },
}))


// ์‚ฌ์šฉ
import { useUserStore } from '@/store/useUserStore'

 const user = useUserStore(state => state.user)
 const fetchUser = useUserStore(state => state.fetchUser)

 useEffect(() => {
   fetchUser()
 }, [fetchUser])

 const email = user ? user.email : null

 

 

3์ฐจ ์‹œ๋„ -> 

๋ฏธ๋“ค์›จ์–ด์—์„œ ์ธ์ฆ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฒฝ๋กœ ์ ‘๊ทผ ์ฐจ๋‹จํ•˜๊ณ  ๋‚˜๋‹ˆ๊นŒ ๋กœ๊ทธ์ธ ํ•˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์›นํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฃจํŠธ์˜ middleware์—์„œ ์„ธ์…˜ ์—†๋‹ค๊ณ  ๊ณ„์† ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š”๊ฒŒ ๊ฑฐ์Šฌ๋ ค์„œ ์„ธ์…˜์„ ์ฒดํฌํ•˜๊ณ  fetchUserํ•ด์˜ค๋„๋ก ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

// @/store/useUserStore.ts

export const useUserStore = create<UserState>((set) => ({
   {/* user: null,*/}
  isLogin: false,
  {/* fetchUser, ๊ฐ™์Œ */}
  checkisLogin: async() => {
    const supabase = createClient()
    const {
      data: { session },
      error,
    } = await supabase.auth.getSession()
    if (error) {
      console.error('Check isLogin ERROR:', error)
    }
    if (session) {
      set({ isLogin: true })
      await useUserStore.getState().fetchUser()
    } else {
      set({ isLogin: false })
    }
  },
}))



'What I Learn' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Separate Next.js Root Layout from 404 Page Layout  (0) 2024.09.01
picture, source, img ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ ๋ฐ˜์‘ํ˜• ์ด๋ฏธ์ง€ ๊ตฌํ˜„ (CSS)  (0) 2024.08.25
media-query๋ฅผ ์ด์šฉํ•œ ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„์‹œ width์— ๋”ฐ๋ฅธ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ / ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ์šฐ์„  ์ˆœ์œ„ (tailwindCSS)  (0) 2024.08.24
#WIL: ๋ชจ๋‹ฌ ๋ฐฑ ์Šคํฌ๋กค ๋ง‰๊ธฐ  (0) 2024.07.26
๋ชจ๋‹ฌ์—์„œ CRUD (zustand)  (0) 2024.07.26
'What I Learn' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • picture, source, img ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ ๋ฐ˜์‘ํ˜• ์ด๋ฏธ์ง€ ๊ตฌํ˜„ (CSS)
  • media-query๋ฅผ ์ด์šฉํ•œ ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„์‹œ width์— ๋”ฐ๋ฅธ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ / ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ์šฐ์„  ์ˆœ์œ„ (tailwindCSS)
  • #WIL: ๋ชจ๋‹ฌ ๋ฐฑ ์Šคํฌ๋กค ๋ง‰๊ธฐ
  • ๋ชจ๋‹ฌ์—์„œ CRUD (zustand)
nuew
nuew
๐Ÿคธ ์žฌ์ฃผ ๋„˜๋Š” ์ค‘
  • nuew
    bloggg. . .๐Ÿฆ–๐Ÿ’ฅ
    nuew
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (88)
      • issue (10)
      • baekjoon (41)
      • lecture recap (11)
      • What I Learn (26)
      • retrospective (0)
      • maeil-mail (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    ๋ฐฑ์ค€
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    issue
    modal
    zustand
    js
    Node.js
    ํ•œ์ž…ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    TailwindCSS
    Study
    Algorithm
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    what i learn
    TypeScript
    ํ•œ์ž…ํฌ๊ธฐ๋กœ์ž˜๋ผ๋จน๋Š”ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    Baekjoon
    JavaScript
    css
    media-query
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
nuew
zustand๋ฅผ ์‚ฌ์šฉํ•œ ์œ ์ € ์ •๋ณด ์ „์—ญ ๊ด€๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”