npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cheatmodes4

v1.0.3

Published

Global Context State Manager extended of CreateFastContext of Jack Herrington

Downloads

12

Readme

CheatModes4 Global Context State Manager

This library is based on a hook that Jack Herrington has published on his YouTube channel

Making React Context FAST! Github Repository

That is the starting point, which I have been extending its functionality to take advantage of all the power of React, the idea is to simplify the code to eliminate the Drilling prop and the complexity and code base of some libraries to handle global states, it also solves React Context and useState Hell.

Context Hell useState Hell

To install it

To install the library, use the following command:

npm i cheatmodes4

Use

Import and Configure First, import the necessary functions from cheatmodes4:

import { CombineProviders, CreateFastContext } from 'cheatmodes4';

Define the Initial State

Define the initial state of your application. You can use interfaces or types depending on your needs.

example

const initialState = {
  foo: 'bar',
  CheatMode: 'CheatModes4',
  count: 0,
  array: null as number[] | null,
  // otros campos que necesites
};

Create the Global Context

Use CreateFastContext to define the global context and destructure the providers, getters, and setters.

export const {
  Provider: InitialStateProvider,
  useContextSignals,
  useStore,
} = CreateFastContext(initialState);

Combine Providers

If you have multiple contexts, combine them using CombineProviders.

const providers = [
  InitialStateProvider
];

export const CheatModes4GlobalContextStateManager = CombineProviders(...providers);
CheatModes4GlobalContextStateManager.displayName = 'AppGlobalContextProvider';

Provide Context to the Application

Finally, pass the provider to your application or component that needs to consume the context information.

  <CheatModes4GlobalContextStateManager>
    <App />
    <Component />
  </CheatModes4GlobalContextStateManager>

Complete usage example

Now to use the context information we have several ways to use it This is a code base created with the Vite.ts packager but I have cleaned it and left the ways to read and set the context state properties.

import { useContextSignals, useStore } from './mainContext'

export default function App () {
  const [ foo, set ] = useStore(s /* store */ => s.foo)
  const { CheatMode } = useContextSignals()

  return <>
    <a
      onClick={() => CheatMode.set('s4')}
    >
      <img src={viteLogo} className='logo' />
    </a>

    <a
      onClick={() => set({ foo: 'hello' })}
    >
      <img src={reactLogo} className='logo react' />
    </a>

    <h1>CheatMode<i>{CheatMode.get}</i></h1>

    <h2>foo: {foo}</h2>

    <div className='card'>
      <Counter />

      <button onClick={() => set(s => ({ count: s.count - 1 }))} >Decrese</button>
    </div>
  </>
}

export function Counter () {
  const { count } = useContextSignals()
  // const [ count, set ] = useContextFields(s => s.count) // another example

  return <>
    <button onClick={() => count.set(count.get + 1)} >
      Increase
    </button>

    <p>count is {count.get}</p>
  </>
}

Has all the power of typescript to detect properties and infer types typescript inference autocomplete auto

Also the useState callback to update the state according to its previous properties types

Now you're ready to make beautiful React code free of common bad practices.

If this project has served you and liked it, and if you want to support financially to continue developing it, contact me [email protected]