Super State

A Simple React State Management System

Usage

Installation

npm i @grampro/superstate

Global State

A Simple Global State Management Utility

// store.ts
import { globalState } from "@grampro/superstate";

// Create states that can be imported and used anywhere
export const count = globalState(0);
export const user = globalState({ name: "", loggedIn: false });
export const todos = globalState(["Learn React", "Build an app"]);
// Component One
import React from "react";
import { count } from "./store";

export default function DisplayCounter() {
  const currentCount = count.useValue();

  return (
    <div>
      <p>Count from other component: {currentCount}</p>
      <button onClick={() => (count.value = count.value + 5)}>Add 5</button>
    </div>
  );
}
// Component Two
import React from "react";
import { count } from "./store";

export default function Counter() {
  const currentCount = count.useValue();

  return (
    <div>
      <p>Count: {currentCount}</p>
      <button onClick={() => (count.value += 1)}>Increment</button>
      <button onClick={() => (count.value -= 1)}>Decrement</button>
    </div>
  );
}

Super State

A Simple State Management Utility

"use client";

import { supState } from "@grampro/superstate";
import { ChevronDown, ChevronRight } from "@/icons/clipboard";
import React from "react";

export default function MobileMenu() {
  const isMenuOpen = supState(false);

  return (
    <div className="mb-4 sticky top-14 z-50 w-full py-4 backdrop-blur-xl md:hidden">
      <button
        onClick={() => {
          isMenuOpen.value = !isMenuOpen.value;
        }}
        className="flex items-center gap-2 px-4"
      >
        {isMenuOpen.value ? <ChevronDown /> : <ChevronRight />}
        Menu
      </button>

      {isMenuOpen.value && (
        <div className="absolute left-0 right-0 top-full bg-white dark:bg-black w-full px-4 h-[calc(100vh-1.5rem)] overflow-hidden z-10">
          <div>Menu 1</div>
        </div>
      )}
    </div>
  );
}

Last updated