// widgets.js
// Actions
const LOAD = 'my-app/widgets/LOAD';
const CREATE = 'my-app/widgets/CREATE';
const UPDATE = 'my-app/widgets/UPDATE';
const REMOVE = 'my-app/widgets/REMOVE';
// Reducer
export default function reducer(state = {}, action = {}) {
switch (action.type) {
// do reducer stuff
default: return state;
}
}
// Action Creators
export function loadWidgets() {
return { type: LOAD };
}
export function createWidget(widget) {
return { type: CREATE, widget };
}
export function updateWidget(widget) {
return { type: UPDATE, widget };
}
export function removeWidget(widget) {
return { type: REMOVE, widget };
}
...
export default
reducer()
reducerexport
action creatorsnpm-module-or-app/reducer/ACTION_TYPE
UPPER_SNAKE_CASE
export action typesredux {actionType, action, reducer}
Java jars beans. Ruby gems. reducer "ducks" "redux"
:
import { combineReducers } from 'redux';
import * as reducers from './ducks/index';
const rootReducer = combineReducers(reducers);
export default rootReducer;
:
import * as widgetActions from './ducks/widgets';
... action creators, bindActionCreators()
.
action creator export
/ ** export
action creators action creator bindActionCreators
import {loadWidgets, createWidget, updateWidget, removeWidget} from './ducks/widgets';
// ...
bindActionCreators({loadWidgets, createWidget, updateWidget, removeWidget}, dispatch);
React Redux Universal Hot Example uses ducks. See /src/redux/modules
.
github issue tweet @erikras
!
-- Erik Rasmussen
Photo credit to Airwolfhound.