Extra ReducerをcreateAsyncActionの付き添いレベルで想定していたが、domainを跨いでactionによるStoreの更新を行える。
ログアウトや、cacheのアップデート(apiのresponseがnestedで他のデータに影響する場合(user.oragnizationとか))の場合は影響範囲をdomain単位で記載できる。
変更による改修コストは確かにあがりそうだけど、importから終える+createAsyncThunkで大量のdispatchを呼ばなくてすむので、コードの集約生が上がりそう。
ちゃんと解説を読むべきだった。。。
createSlice
store-sample.ts
const Logout = createAction('[CORE] LOGOUT')
const userSlice = createSlice({
name: "user",
reducers: {
clear: () => initialState
},
extraReducers: builder => {
builder.addCase(Logout, (state, action) => {
console.log("call because of logout") // 呼ばれる
userSlice.caseReducer.clear(state, action)
}).addDeXXXX
}
})
const companySlice = createSlice({
name: "company",
reducers: {
clear: () => initialState
},
extraReducers: builder => {
builder.addCase(Logout, (state, action) => {
console.log("call because of logout") // 呼ばれる
userSlice.caseReducer.clear(state, action)
}).addDeXXXX
}
})
contaienr.tsx
const App: FC<Props> = props => {
return (
<button onClick={() => {useDispatch(Logout())}} >logout</button>
)
}