Reducer
(複数の)状態変更のストリームの中に居て、それを変更するdispatchをする際に、どういう処理をするかを記述しておく。
actionと stateを取って、新しいstateを返す関数
名前がしっくり来なかったので、これは良い質問
Array.prototype.reduce(reducer, initialValue?) とイメージが繋がらない。
reducer = (accumulator, element) => singleValueType
Arrayというより、Stream
何のStream? actionのstream
reducer = (currentState, action) => nextState
コンポーネントでの、状態の流れ(Stream)でいくと、
天(コンポーネント)からみて? actionが3回行われた
[{type:'ICR'},{type:'ICR'},{type:'DCR'} ].reduce( (currentState, そのaction) => {...}, 0)
現状でのnextStateが返されてる...
reducerのbody(実行部)で、stateを操作した結果を返す
createStore(AReducer)で、storeを作る。
.getState(), .dispath(), .subscribe(render)などでStoreを操作する。
stateの変更方式を関数で定める
引数に、action, payloadを取るようにして、
actionごとに状態変更処理を書く。
この関数と、初期の状態を useReducer()に渡して、state変数とdiapatch変数(関数)を得る
これで、component内で、dispatchにaction, payloadを指定して(するだけで) 状態変更処理を記述する(できる)
状態変更を、dispatch経由に絞ることで、コードの簡素化のメリットを得る。
(その状態定義の中での、あるゆる)状態変化のストリームに変更をdispatchできる。