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

redux-history-state

v0.2.9

Published

Redux state time traveling, optimized for pushState navigation

Downloads

6

Readme


Installing

$ npm install --save redux-history-state

Usage

Creating a Reducer

var reduxHistoryState = require('redux-history-state');
var Immutable = require('immutable');

const reducer = (state = Immutable.Map({ number: 0 }), action) => {
  switch(action.type) {
    case 'INCEMENT':
      return state.set('number', state.get('number') + 1)
    default:
      return state;
  }
};

const createEnhancedReducer = reduxHistoryState.createReducer({});

const enhancedReducer = createEnhancedReducer(reducer);

Push/Replace pages

To create new pages, replace the current redux-history-state offers a wrapper on top of the history API which will comply with the reducers navigation strategy.

Navigating

var reduxHistoryState = require('redux-history-state');

store.dispatch(reduxHistoryState.new(url, title))

Auto-respond to browser events

It can automaticly listen for changes to the current page, and commit the current page once it sees a page change. This means that it is easy to implement it along site existing routing solutions such as react-routing

TODO: Add example of react routing with redux-history-state

To automatically listen and respond to browser events, a store enhancer is needed as well as a listen option for the reducer enhancer.

const createReducer = reduxHistoryState.createReducer({
  listen: true,
  safariFix: history.safariFixes.revertToHash,
});

var createStore = redux.compose(
  history.browser.browserHistory(),
  redux.createStore
)

var store = createStore(
  redux.combineReducers({
    history: createReducer(reducer)
  })
)

Fix Safari push state error (in-progress)

From Safari 9 a limitation on the history API has been enforced, limiting the page to a maximum of a hundred state changes (pushState and replaceState). To work around this limitation to mitigation are includeded, and can be set on reduxHistoryState.createReducer by passing in a safariFix option.

history.safariFixes.revertToHash switched to hash based URLs once it can no longer replace/update using the history API. this requires that the client side code understands hash navigation.

history.safariFixes.reloadPage when it can no longer use the history API it stores the state in the session and then reloads the page. Once that has been done, it will then reload the entire state from the session in order to revert to the previous state.

Manualy handle navigation

var reduxHistoryState = require('redux-history-state')

// Commits the current state, so a back action will lead to that state
store.dispatch(reduxHistoryState.commit())

// Moves to the previous state
store.dispatch(reduxHistoryState.back())

// Moves to the next state
store.dispatch(reduxHistoryState.forward())