Simple React/Redux.


Keywords
connect, react, react-redux, reducer, redux, redux-actions, redux-saga, redux-thunk, reselect, selector
License
MIT
Install
npm install reactdux@2.8.1

Documentation

Reactdux

Orchestrate your React/Redux apps with this simple library.

npm install reactdux

Setup

import { createApp } from 'reactdux';
import App from './components/App'; // root component
import reducer from './reducer'; // see below

const middleware = []; // no middleware yet...

createApp(<App />, reducer, middleware);

Actions

import { createAction } from 'reactdux';

export const toggleStatus = createAction('TOGGLE_STATUS'); // no payload
export const setAge = createAction('SET_AGE', age => ({ age })); // arguments translated to pretty payload

Reducers

import { createReducer } from 'reactdux';
import { setAge } from './actions';

const defaultState = {
  name: 'Joe',
  age: 25,
  friends: [
    { name: 'Paul', age: 20 },
    { name: 'Randy', age: 34 },
  ],
};

export default createReducer(defaultState, [
  [
    setAge,
    payload => ({ age: payload.age }),
  ],
]);

Nested/Combined Reducers

import { createReducer } from 'reactdux';

const user = createReducer(
  {
    name: 'Joe',
    age: '31',
  },
  [
    setAge,
    (state, payload) => state.age = payload.age,
  ],
);

const heartbeats = createReducer(
  [],
  [
    addHeartbeat,
    state => [...state, 'thump'],
  ],
);

export default createReducer({ user, heartbeats });

Selectors

import { createSelector } from 'reactdux';

const selectText = createSelector('age'); // get state.age
const selectUserName = createSelector('user.name'); // get state.user.age
const selectUserAge = createSelector(['user', 'age']); // get state.user.age
const selectUserText = createSelector((state, userId) => state.users[userId]);
const selectText = createSelector(
  (state) => state.friends, // provides first argument below
  (state, name) => name, // provides second argument below
  // last method is only run when any previous result changes (memoization!)
  (friends, name) => friends.find(friend => friend.name === name)).age,
);

Containers

import { createContainer } from 'reactdux';
import { withTheme } from './withTheme'; // HOC - Higher order component
import { setAge } from './actions';
import { selectAge } from './selectors';

const mapProps = props => ({
  age: selectAge(), // no need to pass in state!
  onEndOfYear: () => setAge(26), // no need to dispatch!
}),

export default createContainer(
  withTheme, // HOC
  /* ...more HOCs here */
  mapProps,
  Component,
 );

Made with mrkdown.io