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

react-mise

v0.0.10

Published

Intuitive, type safe and flexible Store for React

Downloads

18

Readme

Build NPM Size Languages License Star Download

React Mise

Intuitive, type safe and flexible Store for React

  • 💡 Intuitive
  • 🔑 Type Safe
  • 🔌 Extensible
  • 🏗 Modular by design
  • 📦 Extremely light

React Mise works both for React ^12

Mise (kanji: 店) pronounced mi'se which means store in Japanese. combined React Mise means the store for React.

👉 Demo with React on StackBlitz

Help me keep working on this project 💚


FAQ

A few notes about the project and possible questions:

Q: Is React Mise the successor of Redux?

A: Yes

Q: What about dynamic modules?

A: Dynamic modules are not type safe, so instead we allow creating different stores that can be imported anywhere

Roadmap / Ideas

  • [x] Should the state be merged at the same level as actions and getters?
  • [x] You can directly call useOtherStore() inside of a getter or action.
  • [ ] ~~Getter with params that act like computed properties ~~ Can be implement through a custom composable and passed directly to state.

Installation

yarn add react-mise
# or with npm
npm install react-mise
# or with pnpm
pnpm add react-mise

Usage

Install the plugin

No need for global object. you don't need something like Provider like Redux or React hooks. it makes the application silly when you need to use multiple stores for 1 component.

Create a Store

You can create as many stores as you want, and they should each exist in different files:

import { defineStore } from "react-mise"

// main is the name of the store. It is unique across your application
// and will appear in devtools
export const useMainStore = defineStore("main", {
  // a function that returns a fresh state
  state: () => ({
    counter: 0,
    name: 'Eduardo',
  }),
  // optional getters
  getters: {
    // getters receive the state as first parameter
    doubleCount: (state) => state.counter * 2,
    // use getters in other getters
    doubleCountPlusOne(): number {
      return this.doubleCount + 1
    },
  },
  // optional actions
  actions: {
    increment() {
      this.counter++
    },
    reset() {
      // `this` is the store instance
      this.counter = 0
    },
  },
})

defineStore returns a function that has to be called to get access to the store (in component):

import { useMainStore } from "src/stores/main"

export default function App() {
  const [mainStore] = useMainStore()

  return (
    <>
      Counter: {mainStore.counter} <br />
      Double counter: {mainStore.double} <br />

      <button onClick={counterStore.increment}>counter++</button>
      <button onClick={counterStore.reset>reset</button>
    </>
  )
}

useStore without in component:

import { useMainStore } from "src/stores/main"

const mainStore = ussMainStore(true)

watch store

import { useMainStore } from "src/stores/main"

const mainStore = ussMainStore(true)

watch(mainStore, () => console.log("main store changed"), { deep: true })

Documentation

To learn more about React Mise, check its documentation.

License

MIT

https://react-mise.js.org