React ReductのTypescriptテンプレート調査 app/store.ts 2022年8月29日 2022年10月25日
目的
React Reduxを使う上で抑えるべきパターンを把握する
コード
import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';
import counterReducer from '../features/counter/counterSlice';
export const store = configureStore({
reducer: {
counter: counterReducer,
},
});
export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
export type AppThunk<ReturnType = void> = ThunkAction<
ReturnType,
RootState,
unknown,
Action<string>
>;
4行目store
を作成configureStore
はcreateStore
関数を抽象化したもの大体の場合に必要なmiddleware
を含んでいる reducer
プロパティにReducerを設定する必要あり Reducerは../features/counter/counterSlice.ts
で定義されている 10行目AppDispatch
にDispatchのtypeを設定し、exportしている別ファイルでDispatchを作成する場合、ここで設定したAppDispatch
をtypeに指定できるようにしておくと記述量が減る+Storeから取得しておくことで、StateやMiddlewareの構造を追加・変更したときにも対応可能 11行目RootState
にstateのtypeを設定し、exportしている別ファイルでSelectorを作成する場合、ここで設定したRootState
をtypeに指定できるようにしておくと記述量が減る+Storeから取得しておくことで、StateやMiddlewareの構造を追加・変更したときにも対応可能 ReturnType
はある関数の出力Typeを得ることができるTypeScriptのUtility type< >
内に設定するのは関数シグネチャなので、typeof store.getState
で関数シグネチャを取得しているUtility typeはParameters Typeとは似て非なるもの ある関数の出力が他の関数で必要な時に便利 Notes on TypeScript: ReturnType – DEV Community 👩💻👨💻 12行目AppThunkReduxでのThunkとは、Storeと同期・非同期のやり取りを行うMiddlewareThunk関数はDispatchとgetStateをパラメータとして受け取る Reducerに書かないような非同期処理などをThunkに書く ThunkAction型は下記のような定義export type ThunkAction< R, // Return type of the thunk function S, // state type used by getState E, // any "extra argument" injected into the thunk A extends Action // known types of actions that can be dispatched > = (dispatch: ThunkDispatch<S, E, A>, getState: () => S, extraArgument: E) => R
Rには、Thunk関数の戻り値のtype Sには、stateのtype Eには、Thunkに(DispatchとgetState以外で)追加で設定したい引数 Aには、Action
のtype https://qiita.com/IgnorantCoder/items/ac681c97eb8318a87bb3 Writing Logic with Thunks | Redux
ディスカッション
コメント一覧
まだ、コメントがありません