複数のuseReducer、どうまとめる問題
課題
code:typescript
const useApp = () => {
const one = useOneReducer()
const two = useTwoReducer()
/// ???
}
パターン
state, actionsごとにわける
reducerの中でactionを作る
useOneApp / useTwoApp みたいなのを再度射出する(モデルごとで分ける)
Contextは単なる仲介者になる。
cons: 名前付け悩む
dispatchersみたいなのを作る
dispatchers.one({ type: "Foo"})みたいな
型が割と正確にはなる
useAppDispatch: (name) => dispatchers[name] みたいなのを作っておくのもアリかも?
そもそもreducerを分けない
これが一番普通な気もする
cons: reducerの処理が太る。arrayとかobjectの処理だとだいぶ厄介っぽい
immer?
reducerを分けないで更に内部で分離
それほぼcombineReducerでは、になってくる
data strucuture helpers
vanill (no lib)
code:typescript
return {
...state,
}
immer
code:typescript
return produce(state, (state) => { state.answers.unshift(action.payload) })
ramda
code:typescript
return R.assoc("answers", R.prepend(action.payload, state.answers), state)
monolite
code:typescript
return set(
state,
(state) => state.answers,
)
updeep
icepick
lodash