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

reduced-actions-redux

v1.0.2

Published

Self-reducing actions for redux

Downloads

8

Readme

Reduced Actions

This is an addon for redux.

About

Reduced actions are enchanced redux actions which carry information on how to change store's state. Instead of writing custom reducers for each action, reduced actions can return reduced state themselves. This is achieved by passing state object's new property value and location of that property using special path notation. It is realy useful when state object gets large and have a complicated structure or/and app have (too) many simple actions for which writing custom reducers might get repetitive.

Instalation and setup

Install npm module

npm install reduced-actions-redux --save-dev

Since reduced actions are more than simple objects, we need to apply custom middleware for the store.

import { createStore, applyMiddleware } from 'redux';
import { reducedActionMiddleware, createReducedActionReducer } from 'reduced-actions-redux';

let defaultStore = {...};
let store = createStore( mainReducer, applyMiddleware(reducedActionMiddleware) );

NOTE: Reduced action middleware must come before any other middleware

We also need custom reducer to handle our reduced actions.

Reduced action reducer can be used as the only reducer or alongside other reducers.

Using with the old reducer:

import { createStore, applyMiddleware } from 'redux';
import { reducedActionMiddleware, createReducedActionReducer } from 'reduced-actions-redux';

let defaultStore = {...};
let store = createStore( createReducedActionReducer(mainReducer), applyMiddleware(reducedActionMiddleware) );

Using without other reducers:

import { createStore, applyMiddleware } from 'redux';
import { reducedActionMiddleware, createReducedActionReducer } from 'reduced-actions-redux';

let defaultStore = {...};
let store = createStore( createReducedActionReducer(() => defaultStore), applyMiddleware(reducedActionMiddleware) );

Usage

Given state's stucture is:

{
  prop: {
    inner_prop: {
       changed: false 
    }
  },  
 ...
}

to update property "changed" all we need to do is simply create and dispacth ReducedAction object

import ReducedAction, { extractValue } from 'reduced-actions-redux';

...
store.dispatch( new ReducedAction('CHANGE_ACTION', 'prop.inner_prop.changed', true) );

ReducedAction constructor takes 3 parameters:

  1. Action name
  2. Path to the property
  3. New value

New value can be a function which takes old value as an argument:

import ReducedAction, { extractValue } from 'reduced-actions-redux';

...
store.dispatch( new ReducedAction('CHANGE_ACTION', 'prop.inner_prop.changed', oldValue => !oldValue ) );

Path

Path notation is intuitive and is expressed as if you would acces normal JS object's properties.

  • . - denotes object property access
  • [i] - denotes array item access

If referenced array contains objects which have id properties i refers to object's "id" property value, otherwise i refers to array index.