Redux
Fluxとの違いは、Reduxでは single source of truth
dispatcherの役割
viewから発行されたactionはdispatcherによってreducerに渡される
reduce()の逐次処理をinvokeするのがdispatcher
componentの初期処理?で定義されたactionは、react componentの中のイベント(クリックなど)でdispatch(action)と実行される
その後は、reducerがやってくれる。component内?では、状態が変更される(変更が1つ進む)
なので、現在の状態の値は保持(useReducer()で、state, dispatchへの変数を作っているので)してる。
そのstateが component(view)に反映される
具体的に、stateはどういうものがある?サンプルのcouterではなく、
いっぱいありそうだけど、
ユーザーに関する変更の多い値(ログインかどうか)
APIから取得する値、そもそもそういう値を見せたい、変更したいわけで、todoとか
APIの場合は promise(非同期)の扱い、副作用がない(state以外の変数?に変化がない) ただ、componentの中での状態の値だと、、めんどそうだが、、、
fluxではこのdispatcherがなかったので、 store内に処理の起動?が入り込んでしまっていた(簡便だけど....整理がつかない. scaleしない?)
action
単なる literal object
typeと palyloadで記述するのがreduxのやり方? ドメインモデルは、srcのディレクトリ階層に反映されているので、
action creator
dispatchに actionの objectをそのまま渡さずに、関数形式(actionを返す)で記述して、それを実行したものをdispatch()に渡す
利点は....
createStore(reducer, initialState?, enhancer?)
enhancerに dispatch()をwrapした関数をいれて、
local storageを利用
logging
非同期処理
redux thunkなど
useSelector
で、reduxのstoreのアクセスして、値を持ってくる? react-reduxでproviderを最上位でタグっておく。
genericsで、stateの型、取得する値の型を指定する。
useDispatch
dispath関数を生成して、action関数を受け取るようにする。
presentationファイル?で作っておいて、componentファイルのタグに属性として関数の形で渡して、
そちらで実行(dispatch)してもらう。
actionが実行されて、stateが変化して、新しい状態でレンダリングされる
ディレクトリ構成をどうするか?