DEV Community

Naxrul Ahmed
Naxrul Ahmed

Posted on

React State Bucket

React State Bucket logo

React State Bucket

Effortlessly manage React application states with react-state-bucket, a lightweight yet powerful state management library.


🚀 Features

  • Global State Management: Manage state across your entire React application with ease.
  • CRUD Operations: Create, Read, Update, and Delete state values effortlessly.
  • Multiple Storage Options: Store state in "memory," "session storage," "local storage," or "URL parameters."
  • Reactivity: Automatically update components when the state changes.
  • Custom Hooks: Seamlessly integrate with React’s functional components.
  • TypeScript Support: Fully typed for a better development experience.
  • Lightweight: Small bundle size with no unnecessary dependencies.

📦 Installation

Install the package via npm or yarn:

# Using npm
npm install react-state-bucket

# Using yarn
yarn add react-state-bucket
Enter fullscreen mode Exit fullscreen mode

🔧 Setup and Usage

Step 1: Create a State Bucket

Define your initial state and actions:

import { createBucket } from 'react-state-bucket';

const initialState = {
  count: 0,
  user: 'Guest',
};

export const useGlobalState = createBucket(initialState);
Enter fullscreen mode Exit fullscreen mode

Step 2: Use the State Bucket in a Component

Access state and actions in your React components:

import React from 'react';
import { useGlobalState } from './state';

const App = () => {
  const globalState = useGlobalState();

  return (
    <div>
      <h1>Global State Management</h1>
      <p>Count: {globalState.get('count')}</p>
      <button onClick={() => globalState.set('count', globalState.get('count') + 1)}>Increment</button>
      <button onClick={() => globalState.delete('count')}>Reset Count</button>
      <pre>{JSON.stringify(globalState.getState(), null, 2)}</pre>
    </div>
  );
};

export default App;
Enter fullscreen mode Exit fullscreen mode

🌟 Advanced Features

Using Multiple Buckets

const useUserBucket = createBucket({ name: '', age: 0 });
const useSettingsBucket = createBucket({ theme: 'light', notifications: true });

function Profile() {
  const userBucket = useUserBucket();
  const settingsBucket = useSettingsBucket();

  return (
    <div>
      <h1>User Profile</h1>
      <button onClick={() => userBucket.set('name', 'John Doe')}>Set Name</button>
      <button onClick={() => settingsBucket.set('theme', 'dark')}>Change Theme</button>
      <pre>User State: {JSON.stringify(userBucket.getState(), null, 2)}</pre>
      <p>Current Theme: {settingsBucket.get('theme')}</p>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Persistent Storage Options

const usePersistentBucket = createBucket(
  { token: '', language: 'en' },
  { store: 'local' }
);

function PersistentExample() {
  const persistentBucket = usePersistentBucket();

  return (
    <div>
      <h1>Persistent Bucket</h1>
      <button onClick={() => persistentBucket.set('token', 'abc123')}>Set Token</button>
      <p>Token: {persistentBucket.get('token')}</p>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Reusing State Across Components

import React from 'react';
import { createBucket } from 'react-state-bucket';

const useGlobalState = createBucket({ count: 0, user: 'Guest' });

function Counter() {
  const globalState = useGlobalState();

  return (
    <div>
      <h2>Counter Component</h2>
      <p>Count: {globalState.get('count')}</p>
      <button onClick={() => globalState.set('count', globalState.get('count') + 1)}>Increment Count</button>
    </div>
  );
}

function UserDisplay() {
  const globalState = useGlobalState();

  return (
    <div>
      <h2>User Component</h2>
      <p>Current User: {globalState.get('user')}</p>
      <button onClick={() => globalState.set('user', 'John Doe')}>Set User to John Doe</button>
    </div>
  );
}

function App() {
  return (
    <div>
      <h1>Global State Example</h1>
      <Counter />
      <UserDisplay />
      <pre>Global State: {JSON.stringify(useGlobalState().getState(), null, 2)}</pre>
    </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

📘 API Reference

createBucket(initial: object, option?: BucketOptions)

Creates a new bucket for managing the global state.

Parameters

Name Type Description
initial object Initial state values.
option object? Optional configuration (default: memory).

BucketOptions

BucketOptions allows you to configure how and where the state is stored. It includes:

Property Type Description
store 'memory', 'session', 'local', 'url' Specifies the storage mechanism for the state.

Returned Functions

State Management

Function Description
set(key, value) Sets the value of a specific key in the state.
get(key) Retrieves the value of a specific key from the state.
delete(key) Removes a key-value pair from the state.
clear() Clears all state values.
getState() Returns the entire state as an object.
setState(state) Updates the state with a partial object.

Change Detection

Function Description
isChange(key) Checks if a specific key has been modified.
getChanges() Returns an array of keys that have changed.
clearChanges() Resets the change detection for all keys.

🤝 Contributing

Contributions are welcome! Please check out the contribution guidelines.


📄 License

This project is licensed under the MIT License.


📞 Support

For help or suggestions, feel free to open an issue on GitHub or contact us via devnaxrul@gmail.com.

Top comments (0)