reducerについてです。reducerを利用して作られているredux-undoを使用しています。redux-undoはその名の通りundo/redoを実装するためのモジュールです。reducerはreducerを頑張って日本語にすると高階reducerという形になるでしょうか。reducerはreducerを引数にしたり戻り値にする関数です(ソース1)。reducerは実はReduxを使っている大半の開発者は使用しています。reducerは聞いたことがなくてもcombineReducersはReduxを使用している大半の開発者は知っているのではないでしょうか。state;}}上のソースコードはredux内にあるcombineReducersからエラー処理や警告メッセージ表示処理を削除したものです。簡単に解説していきます。Object.keys(finalReducers);1は前準備で引数からreducer以外のプロパティを引数から取り除き、同時にkeyを取得しています。解説するような点はないですね。state;}}2で結合したreducerを返しています。各reducerにactionとstateを渡しstateの更新をしています。nextStateを返すように実装されているというわけです。(stateの比較が「!==」で行われているので同じobjectを返さないとnextStateが返りrenderが実行されてしまいますね。reducerですが実際どんな役に立つのでしょうか。reducer関連を複雑にしなくてもmiddlewareで解決すればよいような気もします。reducerのメリットは対象となるreducerを容易に限定できるということだと考えています。対象となるreducerを限定できるということは、少し乱暴ですがstoreの一部だけを対象できるとも言えるのではないでしょうか。storeですがstoreの一部だけを対象にしたい処理もあります。undo/redoなどのような処理です。SuPICEを例にとって考えましょう。viewのstateは基本的にReduxのstore内で保存されています。メニューの開閉やダイアログの表示/非表示、ユニット追加/削除もすべて同じstoreが管理しているわけです。ユニットを誤って削除してしまったのでundoしようとしたら、さっき閉じたメニューが開いた。勘弁してもらいたいものです。メニューの開閉のstateの変更は無視し、ユニットのstateの変更だけundo/redoの対象にしたいのです。reducerの出番ではないでしょうか。まとめ正直な話をいうとredux-undoだけで全ての問題が解決するわけではありません。実装をしていると別途解決しなければならない問題は山ほど出てきます。そもそものstateの構成自体を変更したりと解決の手段は様々です。reducerの活躍の機会はあると思われます。興味深い技術なのではないでしょうか。新機能ご紹介!SuPICEバージョンアップしました!関連するキーワードSuPICETerraSkyBaseについてTerraSkyBaseはクラウドサービスを手掛ける株式会社テラスカイのコンテンツプラットフォームです。