4. usestore-ts

1. Action์„ ๋ฉ”์†Œ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๐Ÿ”— ์‹ค์Šต ๋งํฌarrow-up-right

๐Ÿ’ก Redux์™€ ๋‹ฌ๋ฆฌ ๋‹จ์ผ ์Šคํ† ์–ด๊ฐ€ ์•„๋‹ˆ๊ธฐ์—, ์Šคํ† ์–ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

CounterStore, useCounterStore ๋งŒ๋“ค๊ธฐ

// src/stores/ObjectStore.ts

type Listener = () => void;

export default class ObjectStore {
    private listeners = new Set<Listener>();

    addListener(listener: Listener) {
        this.listeners.add(listener);
    }

    removeListener(listener: Listener) {
        this.listeners.delete(listener);
    }

    protected publish() {
        this.listeners.forEach((listener) => listener());
    }
}

2. usestore-ts

usestore-tsarrow-up-right

๐Ÿ”— ์‹ค์Šต ๋งํฌarrow-up-right

React state management library

๐Ÿ’ก ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ๊ฒƒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ ๋‚จ์—๊ฒŒ ์„ค๋ช…ํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ ๋™์ž‘์„ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ์–˜๊ธฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

ํŒจํ‚ค์ง€ ์„ค์น˜

tsconfig.json ํŒŒ์ผ decorators ์‚ฌ์šฉ ์˜ต์…˜ ๋ณ€๊ฒฝ

Store ์ƒ์„ฑ

Custom Hook ์ž‘์„ฑ

์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์˜ˆ์‹œ

์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์Šคํ† ์–ด์˜ ๊ฐ’, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์Šคํ† ์–ด ์ž์ฒด๊ฐ€ ๋ฐ˜ํ™˜

๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•˜๊ธฐ

๋น„๋™๊ธฐ ํ•จ์ˆ˜์— @Action ์ถ”๊ฐ€

โš ๏ธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์— @Action์„ ๋ถ™์ด๋ฉด ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ์˜ ๋ณ„๋„์˜ ์•ก์…˜์„ ๋งŒ๋“ค๋ฉด ์‹ ๊ฒฝ ์“ธ ๋ถ€๋ถ„์ด ์ค„์–ด๋“ฆ

  • start, complete ๋ถ™์€ ๊ฒƒ์ด ์•ก์…˜

Immer

Immerarrow-up-right

๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ํŽธ๋ฆฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ค๋ธŒ์ ํŠธ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ฃผ๊ณ , ๊ทธ๊ฒƒ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด ์žˆ์Œ Redux Toolkitarrow-up-right ์—๋„ ๊ธฐ๋ณธ์œผ๋กœ ์ ์šฉ

3. useSyncExternalStore

useSyncExternalStorearrow-up-right FECONF 2022 - ์ƒํƒœ๊ด€๋ฆฌ ์ด ์ „์Ÿ์„ ๋๋‚ด๋Ÿฌ ์™”๋‹คarrow-up-right

external store๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋Š” React Hook

Last updated