Redux を使った実装をしていると、 action.typeを下記のように定数で宣言し、

{% highlight js %} export const ADD_TODO = 'ADD_TODO'; export const TOGGLE_TODO = 'TOGGLE_TODO'; export const SET_VISIBILITY_FILTER = 'SET_VISIBILITY_FILTER';

reducers, actionsなどでは以下のようにimportする実装がよく書かれていると思うのですが
( Redux のドキュメントでもこのような実装だった ) {% highlight js %} import { ADD_TODO, TOGGLE_TODO, SET_VISIBILITY_FILTER } from './actions'

宣言するaction.typeが増えた場合に、
定数の宣言に不自由さを感じたので、
定数を作るための関数を用意しました。

{% highlight js %} export function createConstants(...constants) { return constants.reduce((accumulator, constant) => { accumulator[constant] = constant; return accumulator; }, {}); }

定数の宣言はこの関数を使うと下記のようになります。

{% highlight js %} import { createConstants } from '../utils';

export default createConstants( 'ADD_TODO', 'TOGGLE_TODO', 'SET_VISIBILITY_FILTER', );

{% endhighlight %}

reducers, actionsでは下記のようにimportすることで、シンプルに定数を扱うことができます。

{% highlight js %} import C from '../constans';

switch (action.type) { case C.ADD_TODO: ... }

ちなみに、createConstants関数はeslint-confing-airbnbにあてると、 no-param-reassign

Assignment to property of function parameter 'accumulator'

とerrorになるので、.eslintrcに下記を追加して、errorを避けています。

{% highlight json %} "rules": { "no-param-reassign": [2, { "props": false }] }