0.1.16 โ€ข Published 12 months ago

react-tada v0.1.16

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

๐ŸŽ‰react-tada

Build Size Version

visit website or npm i react-tada

  • react-tada is a library for state management in React.
  • It has a small bundle size.
  • It optimizes rendering using selector functions.
  • It uses a simple tada creator interface that requires no complex explanations.
  • react-tada๋Š” ๋ฆฌ์•กํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์ž‘์€ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค.
  • ์„ ํƒ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ Œ๋”๋ง ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ์„ค๋ช…์ด ํ•„์š” ์—†๋Š” ๊ฐ„๋‹จํ•œ tada ์ƒ์„ฑ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
npm i react-tada

First create a Tada!

Tada is a hook. Without needing a complicated explanation, you can easily create a Tada. Tada๋Š” hook์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์„ค๋ช… ํ•„์š” ์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ Tada๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// jsx
import { tada } from 'react-tada;

const useCountTada = tada({ count: 0 });
// tsx
import { tada } from 'react-tada';

type State {
  count: number;
}

export const useCountTada = tada<State>({ count: 0 });

Then use it in your component and you're done!

You can update the state as simply as setState in useState without needing to create or select a separate set function. However, the state should be updated immutably. ๋ณ„๋„์˜ set ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„ ํƒํ•˜์ง€ ์•Š์•„๋„ useState์˜ setState์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ƒํƒœ๋Š” ๋ถˆ๋ณ€์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

const useCount = useCountTada.useTada;

function Counter() {
  const [count, setCount] = useCount((state) => state.count);
  const inc = () => {
    setCount((prev) => ({
      ...prev,
      count: prev.count + 1,
    }));
  };

  return (
    <>
      <h2>{count}</h2>
      <button onClick={inc}>+</button>
    </>
  );
}

Separate states using Provider!

You can also use a Provider. The Component within the CountProvider will share separate, distinct count values! Provider๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. CountProvider ์ปดํฌ๋„ŒํŠธ ๋‚ด์˜ Component ์ปดํฌ๋„ŒํŠธ๋Š” ๋ถ„๋ฆฌ๋œ, ์„œ๋กœ ๋‹ค๋ฅธ count ๊ฐ’์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค!

const CountProvider = useCountTada.TadaProvider;

const App = () => (
  <>
    <CountProvider>
      <Component /> // initial value
      <CountProvider initialState={{ count: 10 }}>
        <Component /> // count: 10
        <CountProvider initialState={{ count: 20 }}>
          <Component /> // count: 20
        </CountProvider>
      </CountProvider>
    </CountProvider>
  </>
);

In this way, you can separate states even in the sub-tree. ์ด์ฒ˜๋Ÿผ ํ•˜์œ„ ํŠธ๋ฆฌ์—์„œ๋„ ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Example: Simple Counter App

First, create the useCountTada hook using the Tada constructor interface. ๋จผ์ €, tada ์ƒ์„ฑ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ useCountTada ํ›…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

> tada.ts

import { tada } from 'react-tada';

interface CountState {
  count: number;
}

export const useCountTada = tada<CountState>({ count: 0 });

Generate the count state and setCount to update the state. Additionally, add renderCount to check the number of times the component is rendered. count ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  setCount๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด renderCount๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

>  Counter.tsx

const useCount = useCountTada.useTada;

const Counter = () => {
  const [count, setCount] = useCount((state) => state.count);
  const renderCount = useRef(1);

  useEffect(() => {
    renderCount.current += 1;
  });

  return (
    <>
      <div>
        <h2>Counter Component : {count}</h2>
        <button
          onClick={() => {
            setCount((prev) => ({ ...prev, count: prev.count + 1 }));
          }}
        >
          +
        </button>
        <p>Render Count : {renderCount.current}</p>
      </div>
    </>
  );
};

export default Counter;

Finally, create the TadaProvider using the useCountTada hook, then generate the sub-tree structures where you want to separate the state. ๋งˆ์ง€๋ง‰์œผ๋กœ useCountTada ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ TadaProvider๋ฅผ ์ƒ์„ฑํ•œ ๋’ค, ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์€ ํ•˜์œ„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋“ค์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

> CounterPage.tsx

const CountProvider = useCountTada.TadaProvider;

const CounterPage = () => {
  return (
    <>
      <Counter /> // count : 0
      <Counter /> // count : 0
      <CountProvider initialState={{ count: 10 }}>
        <Counter /> // count : 10
        <Counter /> // count : 10
        <CountProvider initialState={{ count: 20 }}>
          <Counter /> // count : 20
        </CountProvider>
      </CountProvider>
    </>
  );
};

export default CounterPage;

By using TadaProvider in this way, you can separate states and prevent specific tree state changes from affecting rendering and other impacts. ์ด์ฒ˜๋Ÿผ TadaProvider๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠน์ • ํŠธ๋ฆฌ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ๋ฆฌ๋ Œ๋”๋ง๊ณผ ๊ฐ™์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

0.1.16

12 months ago

0.1.15

12 months ago

0.1.14

12 months ago

0.1.13

12 months ago

0.1.12

12 months ago

0.1.10

12 months ago

0.1.9

12 months ago

0.1.7

12 months ago

0.1.6

12 months ago

0.1.0

12 months ago

0.0.2

12 months ago

0.0.1

12 months ago