ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/zustand

createStore

dev_been94 2024. 12. 14. 15:59
728x90
๋ฐ˜์‘ํ˜•

createStore

 

๐ŸŽฏ createStore๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

**createStore**๋Š” Zustand์—์„œ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, "์•ฑ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ์ฐฝ๊ณ (์Šคํ† ์–ด)๋ฅผ ๋งŒ๋“œ๋Š” ๋„๊ตฌ"์˜ˆ์š”.

React ์•ฑ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜์ฃ ?
Zustand์˜ **createStore**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์š”!

 

๐Ÿ  ์‹ค์ƒํ™œ ๋น„์œ : ์ƒํƒœ ๊ด€๋ฆฌ ์ฐฝ๊ณ 

์—ฌ๋Ÿฌ๋ถ„์ด ์ž‘์€ ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ๋ฅผ ์šด์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณผ๊ฒŒ์š”. ๐Ÿ”

  • ๊ฐ€๊ฒŒ ์•ˆ์—๋Š” ์žฌ๋ฃŒ(์ƒํƒœ)๊ฐ€ ํ•„์š”ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋นต, ํŒจํ‹ฐ, ์น˜์ฆˆ๊ฐ€ ์žˆ๊ฒ ์ฃ ?
  • ์ด ์žฌ๋ฃŒ๋“ค์„ ์–ด๋””์— ์ €์žฅํ• ๊นŒ์š”? **๋ƒ‰์žฅ๊ณ (์ €์žฅ์†Œ)**์— ๋ณด๊ด€ํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒ ์ฃ .
  • ์ง์›๋“ค์€ ์–ธ์ œ๋“ ์ง€ ๋ƒ‰์žฅ๊ณ ์— ๊ฐ€์„œ ํ•„์š”ํ•œ ์žฌ๋ฃŒ๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ด ๋น„์œ ์—์„œ:

  • ๋ƒ‰์žฅ๊ณ  → Zustand์˜ createStore๋กœ ๋งŒ๋“  ์ƒํƒœ ์ €์žฅ์†Œ
  • ์žฌ๋ฃŒ → ์šฐ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์ƒํƒœ
  • ์ง์›(์ปดํฌ๋„ŒํŠธ) → ์ƒํƒœ๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” React ์ปดํฌ๋„ŒํŠธ

 

๐Ÿ› ๏ธ createStore ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๊ฐ„๋‹จํ•œ ์นด์šดํ„ฐ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด createStore๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊ฒŒ์š”!

 

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์—์„œ createStore๋ฅผ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • set: ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
  • count: ์Šคํ† ์–ด์— ์ €์žฅํ•  ์ดˆ๊ธฐ ์ƒํƒœ ๊ฐ’์ž…๋‹ˆ๋‹ค.
  • increase์™€ decrease: ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

2. ์Šคํ† ์–ด ์‚ฌ์šฉํ•˜๊ธฐ

์ด์ œ ๋งŒ๋“  ์Šคํ† ์–ด๋ฅผ React ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•ด ๋ณผ๊ฒŒ์š”!

import React from "react";
import useCounterStore from "./store"; // ๋ฐฉ๊ธˆ ๋งŒ๋“  Zustand ์Šคํ† ์–ด ๊ฐ€์ ธ์˜ค๊ธฐ

function Counter() {
  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)
    • useCounterStore๋Š” ์ƒํƒœ(count)์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜(increase, decrease)๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด์š”.
  2. ์Šคํ† ์–ด ๊ฐ€์ ธ์˜ค๊ธฐ
    • useCounterStore()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์Šคํ† ์–ด์—์„œ ์ƒํƒœ์™€ ํ•จ์ˆ˜๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • ์ด ๋•๋ถ„์— React ์ปดํฌ๋„ŒํŠธ์—์„œ ์‰ฝ๊ฒŒ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”.
  3. ๋ฒ„ํŠผ ํด๋ฆญ
    • increase ํ•จ์ˆ˜๋‚˜ decrease ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ƒํƒœ(count)๊ฐ€ ๋ฐ”๋€Œ๊ณ , ํ™”๋ฉด์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

 

๐ŸŒŸ Zustand์˜ ์žฅ์ 

  1. ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ 
    • ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.
  2. React ์ปดํฌ๋„ŒํŠธ ์–ด๋””์„œ๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • Zustand ์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  3. ๋น ๋ฅธ ์„ฑ๋Šฅ
    • ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๊ด€๋ จ๋œ ์ปดํฌ๋„ŒํŠธ๋งŒ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ๋„ ์ข‹์•„์š”!

๐Ÿ” ๋‹ค๋ฅธ ๋น„์œ : ๋ฉ”๋‰ดํŒ๊ณผ ์ง์›

Zustand๋ฅผ ๋‹ค์‹œ ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ ๋น„์œ ๋กœ ๋Œ์•„๊ฐ€ ๋ณผ๊นŒ์š”?

  • createStore: ๋ฉ”๋‰ดํŒ์„ ๋งŒ๋“ค๊ณ  "์žฌ๋ฃŒ(์ƒํƒœ)"์™€ "๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•(ํ•จ์ˆ˜)"์„ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค.
  • React ์ปดํฌ๋„ŒํŠธ: ๊ฐ€๊ฒŒ์˜ ์ง์›๋“ค์ด ๋ฉ”๋‰ดํŒ์„ ๋ณด๊ณ  ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒํƒœ ์—…๋ฐ์ดํŠธ: ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ํ™”๋ฉด์— ์ฆ‰์‹œ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ Zustand๋Š” ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์˜ˆ์š”!

 

๐Ÿš€ ํ•œ ์ค„ ์š”์•ฝ

createStore๋Š” Zustand์—์„œ ์ƒํƒœ(๋ฐ์ดํ„ฐ)๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ž‘์€ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
React ์ปดํฌ๋„ŒํŠธ ์–ด๋””์„œ๋“  ์‰ฝ๊ฒŒ ์ƒํƒœ๋ฅผ ๊บผ๋‚ด๊ณ  ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'web > zustand' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

create  (0) 2024.12.14
reateWithEqualityFn  (1) 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