ν‹°μŠ€ν† λ¦¬ λ·°

web/zustand

create

dev_been94 2024. 12. 14. 16:40
728x90
λ°˜μ‘ν˜•

create

 

🎯 createλž€ λ¬΄μ—‡μΌκΉŒμš”?

**create**λŠ” Zustandμ—μ„œ μƒνƒœ(store)λ₯Ό λ§Œλ“œλŠ” ν•¨μˆ˜μ˜ˆμš”.
κ°„λ‹¨ν•˜κ²Œ λ§ν•˜λ©΄, React μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©ν•  μž‘μ€ μ €μž₯μ†Œ(μŠ€ν† μ–΄)λ₯Ό μƒμ„±ν•˜λŠ” λ„κ΅¬μ˜ˆμš”.

μ—¬κΈ°μ„œ μ€‘μš”ν•œ ν‚€μ›Œλ“œ:

  • μƒνƒœ(state): 화면에 ν‘œμ‹œλ˜λŠ” 데이터 (예: 숫자, λ¬Έμžμ—΄, 리슀트 λ“±)
  • μƒνƒœλ₯Ό λ°”κΎΈλŠ” 방법: μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜

 

πŸ• 상점 μ΄μ•ΌκΈ°λ‘œ μ΄ν•΄ν•˜κΈ°

상상을 ν•΄λ³΄μ„Έμš”! μ—¬λŸ¬λΆ„μ΄ ν”Όμž κ°€κ²Œλ₯Ό μš΄μ˜ν•˜κ³  μžˆμ–΄μš”. πŸ•

  • μ£Όλ°©: ν”Όμžλ₯Ό λ§Œλ“€κ³  κ΄€λ¦¬ν•˜λŠ” κ³³
  • λ©”λ‰΄νŒ: μƒνƒœ(store)μž…λ‹ˆλ‹€. μ–΄λ–€ 재료(데이터)κ°€ 있고, 무엇을 ν•  수 μžˆλŠ”μ§€(μƒνƒœ μ—…λ°μ΄νŠΈ ν•¨μˆ˜)κ°€ μ ν˜€ μžˆμ–΄μš”.
  • μ†λ‹˜(μ»΄ν¬λ„ŒνŠΈ): λ©”λ‰΄νŒμ„ 보고 ν”Όμžλ₯Ό μ£Όλ¬Έν•˜μ£ .

μ—¬κΈ°μ„œ **create**λŠ” 이 λ©”λ‰΄νŒ(μŠ€ν† μ–΄)을 λ§Œλ“œλŠ” λ„κ΅¬μ˜ˆμš”!
createλ₯Ό μ‚¬μš©ν•˜λ©΄ μƒνƒœμ™€ μƒνƒœλ₯Ό λ°”κΎΈλŠ” 방법을 ν•œλˆˆμ— 정리할 수 μžˆμ–΄μš”.

 

πŸ› οΈ create κΈ°λ³Έ μ‚¬μš©λ²•

κ°„λ‹¨ν•œ μΉ΄μš΄ν„° 예제λ₯Ό 톡해 createλ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„λ³Όκ²Œμš”.

 

1. Zustand μŠ€ν† μ–΄ λ§Œλ“€κΈ°

import { create } from "zustand";

// Zustand μŠ€ν† μ–΄ λ§Œλ“€κΈ°
const useCounterStore = create((set) => ({
  count: 0, // 초기 μƒνƒœ
  increase: () => set((state) => ({ count: state.count + 1 })), // μƒνƒœ 증가
  decrease: () => set((state) => ({ count: state.count - 1 })), // μƒνƒœ κ°μ†Œ
}));

μ„€λͺ…:

  • create: Zustandμ—μ„œ μŠ€ν† μ–΄λ₯Ό λ§Œλ“œλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
  • set: μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” ν•¨μˆ˜μ˜ˆμš”.
  • 초기 μƒνƒœ: count: 0μ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€.
  • μƒνƒœ λ³€κ²½ ν•¨μˆ˜: increase와 decreaseλ₯Ό 톡해 count 값을 λŠ˜λ¦¬κ±°λ‚˜ 쀄일 수 μžˆμ–΄μš”.

 

2. μŠ€ν† μ–΄ μ‚¬μš©ν•˜κΈ°

React μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœμ™€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ³Όκ²Œμš”.

import React from "react";
import useCounterStore from "./store"; // Zustand μŠ€ν† μ–΄ κ°€μ Έμ˜€κΈ°

function Counter() {
  // Zustand μŠ€ν† μ–΄μ—μ„œ μƒνƒœμ™€ ν•¨μˆ˜ κ°€μ Έμ˜€κΈ°
  const { count, increase, decrease } = useCounterStore();

  return (
    <div>
      <h1>μΉ΄μš΄ν„°: {count}</h1>
      <button onClick={increase}>+1 증가</button>
      <button onClick={decrease}>-1 κ°μ†Œ</button>
    </div>
  );
}

export default Counter;

πŸ” μ½”λ“œ μ„€λͺ…

  1. μŠ€ν† μ–΄ λ§Œλ“€κΈ°
    • create둜 μƒνƒœ(count)와 μƒνƒœλ₯Ό λ°”κΎΈλŠ” ν•¨μˆ˜(increase, decrease)λ₯Ό μ •μ˜ν–ˆμ–΄μš”.
  2. μŠ€ν† μ–΄ μ‚¬μš©ν•˜κΈ°
    • useCounterStore()λ₯Ό ν˜ΈμΆœν•΄μ„œ μƒνƒœμ™€ ν•¨μˆ˜λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
    • 이 덕뢄에 React μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ₯Ό μ‰½κ²Œ 읽고 μ—…λ°μ΄νŠΈν•  수 μžˆμ–΄μš”.
  3. λ²„νŠΌ 클릭 μ‹œ μƒνƒœ λ³€κ²½
    • increase()λ₯Ό ν˜ΈμΆœν•˜λ©΄ count 값이 1 μ¦κ°€ν•˜κ³ ,
    • decrease()λ₯Ό ν˜ΈμΆœν•˜λ©΄ count 값이 1 κ°μ†Œν•΄μš”.
    • μƒνƒœκ°€ λ°”λ€Œλ©΄ ReactλŠ” μžλ™μœΌλ‘œ 화면을 μ—…λ°μ΄νŠΈν•΄μ€λ‹ˆλ‹€!

πŸŽ‰ κ²°κ³Ό

  • 카운트 값이 화면에 ν‘œμ‹œλ©λ‹ˆλ‹€.
  • λ²„νŠΌμ„ 클릭할 λ•Œλ§ˆλ‹€ μƒνƒœκ°€ λ°”λ€Œκ³  화면도 ν•¨κ»˜ μ—…λ°μ΄νŠΈλΌμš”!

 

🧩 createλ₯Ό μ‚¬μš©ν•  λ•Œ 쒋은 점

  1. μ½”λ“œκ°€ κ°„λ‹¨ν•˜κ³  직관적
    • λͺ‡ μ€„λ§ŒμœΌλ‘œ μƒνƒœμ™€ μƒνƒœ λ³€κ²½ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 μžˆμ–΄μš”.
  2. μƒνƒœλ₯Ό μ‰½κ²Œ 곡유
    • μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ™μΌν•œ μƒνƒœλ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄μš”.
  3. μœ μ—°ν•œ μƒνƒœ 관리
    • μž‘μ€ ν”„λ‘œμ νŠΈλΆ€ν„° 큰 ν”„λ‘œμ νŠΈκΉŒμ§€ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆμ–΄μš”.

 

πŸš€ createλ₯Ό ν™œμš©ν•œ λ‹€μ–‘ν•œ μ˜ˆμ‹œ

  1. To-Do 리슀트 관리
const useTodoStore = create((set) => ({
  todos: [], // 초기 μƒνƒœ
  addTodo: (task) => set((state) => ({ todos: [...state.todos, task] })),
  removeTodo: (task) =>
    set((state) => ({ todos: state.todos.filter((t) => t !== task) })),
}));

 

2. 둜그인 μƒνƒœ 관리

const useAuthStore = create((set) => ({
  user: null,
  login: (userData) => set({ user: userData }),
  logout: () => set({ user: null }),
}));

 

🌟 μ •λ¦¬ν•˜μžλ©΄!

createλŠ” Zustandμ—μ„œ μƒνƒœμ™€ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 방법을 μ •λ¦¬ν•΄μ„œ μ €μž₯μ†Œ(store)λ₯Ό λ§Œλ“œλŠ” ν•¨μˆ˜μ˜ˆμš”.
React μ»΄ν¬λ„ŒνŠΈμ—μ„œ κ°„λ‹¨ν•˜κ³  λΉ λ₯΄κ²Œ μƒνƒœλ₯Ό κ³΅μœ ν•˜κ³  관리할 수 μžˆμ–΄μš”!

728x90
λ°˜μ‘ν˜•

'web > zustand' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

reateWithEqualityFn  (1) 2024.12.14
createStore  (0) 2024.12.14
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2025/01   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
κΈ€ 보관함
λ°˜μ‘ν˜•
250x250