@futureverse/stateboss
TypeScript icon, indicating that this package has built-in type declarations

0.1.3 • Public • Published

@futureverse/stateboss

yarn add @futureverse/stateboss

Features

  • Seamless & type-safe state management
    • Export porcelain interfaces from containers
    • Access interface from anywhere in the hierarchy
  • First class logging support (via @sylo/logger)
    • Completely optional
    • Containers always get a contextualized logger
    • Ships with no-op and console.log loggers
    • Grab a logger anywhere with useLogger

Example

import React from 'react';
import * as L from '@sylo/logger';
import { createContainer, LoggerProvider, useLogger, Logger } from '@futureverse/stateboss';

function useCounterImpl(logger: Logger): {
  increment(): void;
  decrement(): void;
  counter: number;
} {
  const [counter, setCounter] = React.useState(0);
  const increment = React.useCallback(() => {
    logger.d('incrementing!');
    setCounter((x) => x + 1);
  }, []);
  const decrement = React.useCallback(() => {
    logger.d('decrementing!');
    setCounter((x) => x - 1);
  }, []);
  return {
    counter,
    increment,
    decrement,
  };
}

const { Provider: CounterProvider, useContainer: useCounter } = createContainer(useCounterImpl);

function MyComponent() {
  const { counter, increment, decrement } = useCounter();
  const logger = useLogger();
  React.useEffect(() => {
    logger.d('counter updated: ', counter);
  }, [counter, /* stable: */ logger]);
  return (
    <div>
      <div>counter: {counter}</div>
      <div>
        <button onClick={increment}>+</button>
        <button onClick={decrement}>-</button>
      </div>
    </div>
  );
}

function MyApp() {
  return (
    <LoggerProvider logger={L.consoleLogger}>
      <CounterProvider>
        <MyComponent />
      </CounterProvider>
    </LoggerProvider>
  );
}

Maintainers

Readme

Keywords

none

Package Sidebar

Install

npm i @futureverse/stateboss

Weekly Downloads

180

Version

0.1.3

License

none

Unpacked Size

9.6 kB

Total Files

8

Last publish

Collaborators

  • rmafv
  • chris_futureverse
  • fv-philip.roigard
  • taylor_tran
  • kingsley.wang
  • jcsanpedro
  • nick95550
  • garethdainesnpm
  • developer-darpan
  • tknff
  • mj.liang
  • hlissnake
  • chris.czurylo
  • felixschl
  • pramodya-centrapass
  • admin-futureverse