#Reduxってなに?
ReduxとはReactと相性が良いフレームワークのことです。
Redux単体で利用することも可能ですが、ReactとReduxの組み合わせは鉄板でしょう。
stateを容易に管理することの出来るReduxですが、大規模なアプリケーションになればなるほど効果を発揮してくれそうです。
#Reduxアプリを構成する機能ってなに?
Reduxを使ったアプリはAction,Reducer、Storeによって構成されています。
##Actionとは
何がおきたのかという情報を持つオブジェクトです。
ActionをStoreへ送信(dispatch)すると、Storeのstateが変更されます。
stateの変更ではActionが必ず必要となります。
stateへ通じるルートを攻略する第一段階、まるで門番のような立ち位置の機能ですね。
const action = {
type: 'SET_wanko',
text: 'トイプードル'
};
Actionではどういうタイプのアクションなのかを明示するためtypeプロパティが必要となります、他と区別できないと何がなんだかわからなくなりますもんね。
逆に言えばこのActionはその程度の情報しか持っておらず、どのようにstateを変更するのか知らない存在なのです。
##Reducerとは
上記したSET_wankoというタイプのアクション受けて、storeから受け取ったstateを変更して返す純粋関数です。
Reducer内では引数変更したり、API呼び出したり、Math.random()等の純粋関数以外の関数を呼び出してはいけません。
結果が毎回同一になるような操作しか扱えないのです。
stateをどう変更するのかactionでは決めれなかったことを指定しています。
function triming(state = [], action) {
switch (action.type) {
case 'SET_wanko':
return state.concat([{ text: action.text, completed: false }]);
default:
return state;
}
}
##Storeとは
Storeとはアプリケーションの全てのstateを保持するオブジェクトです。
dispatchされたActionと保持するstateをreducerに渡してstate変更に一役買う立場の存在で、ボスのような風格ですね。
Storeの複製はダメです、ボスは一人だけなのです。
又、stateの変更は必ずActionを経由してください、バグの特定が困難になるのを防ぐためです。
ボスに会うためにはまず名乗って(Action type)からが礼儀ってもんです。
// Action
const action = {
type: 'SET_wanko',
text: 'トイプードル'
};
// Reducer
function triming(state = [], action) {
switch (action.type) {
case 'SET_wanko':
return state.concat([{ text: action.text, completed: false }]);
default:
return state;
}
}
// Store
const store = Redux.createStore(triming);
// Actionをdispatchする
// Reducerであるtodosが実行され、Storeが保持しているstateが変更される。
store.dispatch(action);
// stateを取得する
console.log(store.getState());