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 🙏

© 2026 – Pkg Stats / Ryan Hefner

quickly-use-reducer

v1.0.0

Published

Quickly generate a reducer and corresponding action creators

Readme

Quickly Use Reducer

Use this package to generate reducer and action creators automatically. All you need to do is passing the initial state and an object which contains all case reducers.

Example

import type { PayloadAction } from 'quickly-use-reducer';
import { createSlice } from 'quickly-use-reducer';

const slice = createSlice([] as Todo[], {
  setTodos: (state, action: PayloadAction<Todo[]>) => action.payload,
  addTodo: (state, action: PayloadAction<Todo>) => [...state, action.payload],
  checkTodo: (state, action: PayloadAction<{ id: string; checked: boolean }>) => {
    const { id, checked } = action.payload;
    return state.map(todo => {
      if (todo.id === id) return { ...todo, isCompleted: checked };

      return todo;
    });
  },
  deleteTodo: (state, action: PayloadAction<string>) => state.filter(todo => todo.id !== action.payload),
});

const {
  initialState,
  actionCreators: { setTodos, addTodo, checkTodo, deleteTodo },
  reducer,
} = slice;

const TodoApp = () => {
  const [todos, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      {todos.map(todo => (
        <div key={todo.id} onClick={() => dispatch(deleteTodo(todo.id))}>
          {todo.content}
        </div>
      ))}
    </div>
  );
};

API reference

createSlice

Parameters

createSlice accepts two parameters, and these parameters are all required.

initialState

The initial state of your reducer. It helps createSlice to generate correct action creators.

reducers

An object contains all your case reducers. A case reducer is a piece of the main reducer, it works like a normal reducer, but only handles one case.

A case reducer can accepts 0 ~ 2 parameters, and should return a new state with the same type of the initial state.

const slice = createSlice(0, {
  // 0 parameter
  reset: () => 0,
  // 1 parameter
  increment: state => state + 1,
  // 2 parameters
  // typescript: (state, action: PayloadAction<number>) => state + action.payload
  add: (state, action) => state + action.payload,
});

Return

createSlice will return an object which contains initialState, actionCreators and reducer.

initialState

The same as the first parameter.

actionCreators

A object contains all action creators, their name are the same as the reducers' property. For example the above slice will generate an actionCreators object which contains reset, increment and add.

const { reset, increment, add } = slice.actionCreators;
reducer

A reducer function. You can pass it to useReducer directly.

const [state, dispatch] = useReducer(slice.reducer, slice.initialState);