1.0.0 • Published 2 years ago

@equal/react-store v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

@equal/react-store

Requirements

  • React@18

Installation

npm i @equal/react-store

Usage

Create Instance

import { createStore } from '@equal/store';

const counter = createStore(0);

Using the Store

Read & Write

This hook causes a re-render on the component, and the store changes will be watched.

import { useStore } from '@equal/react-store';

function Component() {
  // ...
  const [value, mutations] = useStore(counter);

  console.log(value); // 0
  mutations.write(1);
  console.log(value); // 1
  mutations.write((n) => n + 1);
  console.log(value); // 2
  // ...
}

Only Read

This hook causes a re-render on the component, and the store changes will be watched.

import { useStoreValue } from '@equal/react-store';

function Component() {
  // ...
  const value = useStoreValue(counter);
  // ...
}

Only Read with Selector

This hook causes a re-render on the component, and the selector changes will be watched.

import { useStoreSelector } from '@equal/react-store';

function Component() {
  // ...
  const value = useStoreSelector(counter, (value) => value * 2);
  // ...
}

Only Write

This hook doesn't cause a re-render on the component, the store changes doesn't will be watched.

import { useStoreMutations } from '@equal/react-store';

function Component() {
  // ...
  const mutations = useStoreMutations(counter);

  mutations.read(); // 0
  mutations.write((n) => n + 1);
  mutations.read(); // 1
  // ...
}

Creating an Alias

import type { StoreValue, StoreMutations } from '@equal/store';
import { useStoreValue, useStoreMutations } from '@equal/react-store';

const useCounterMutations = (): StoreMutations<typeof counter> => useStoreMutations(counter);

const useCounterValue = (): StoreValue<typeof counter> => useStoreValue(counter);

Add Mutations to the Store

import { createStore } from '@equal/store';
import { useStoreMutations } from '@equal/react-store';

const counter = createStore(0)
  .withMutations({
    increment(value, payload: { value: number; }) {
      return value + payload.value;
    },
    decrement(value) {
      return value - 1;
    },
  });

function Component() {
  // ...
  const mutations = useStoreMutations(counter);

  mutations.increment({ value: 2 }); // 2
  mutations.decrement(); // 1
  // ...
}