Redux Toolkit:createSlice と configureStore
createSlice で state のスライスを定義し、configureStore でまとめ、useDispatch と useSelector を使って React コンポーネントからアクションを dispatch します。
「Redux Toolkit:createSlice と configureStore」はCoddyKit上の無料Frontend Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFrontend Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Frontend Academyコースには全4レッスンが含まれています。
Redux Toolkit を使う理由
Redux Toolkit(RTK)は、Redux ロジックを記述するための公式かつ意見の強い方法です。通常の Redux に必要なボイラープレートをなくし、アクションタイプ文字列の手動管理、冗長な reducer、複雑な store のセットアップが不要になります。
Redux Toolkit のインストール
RTK と React バインディングの両方をインストールしてください。
npm install @reduxjs/toolkit react-reduxcreateSlice — State + Reducer + Actions
createSlice は、1 回の呼び出しで state の slice と、その reducer および action creator を作成します。内部では Immer を使用して不変更新を実現しています。
import { createSlice } from '@reduxjs/toolkit';
const counterSlice = createSlice({
name: 'counter',
initialState: { value: 0 },
reducers: {
increment: state => { state.value++; }, // Immer: mutate directly
decrement: state => { state.value--; },
reset: state => { state.value = 0; },
incrementBy: (state, action) => { state.value += action.payload; }
}
});
export const { increment, decrement, reset, incrementBy } = counterSlice.actions;
export default counterSlice.reducer;configureStore — Store の組み立て
configureStore は、適切なデフォルト設定で Redux store を作成します。Redux DevTools が有効になり、thunk middleware も含まれます。
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';
import cartReducer from './cartSlice';
export const store = configureStore({
reducer: {
counter: counterReducer,
cart: cartReducer,
}
});
// TypeScript types:
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;Store の提供
react-redux の <Provider store={store}> でアプリをラップします。
import { Provider } from 'react-redux';
import { store } from './store';
ReactDOM.createRoot(document.getElementById('root')!).render(
<Provider store={store}>
<App />
</Provider>
);useSelector — State の読み取り
useSelector(selector) は store から読み取ります。選択した slice が変更されると、コンポーネントを再レンダリングします。
import { useSelector } from 'react-redux';
import type { RootState } from './store';
function Counter() {
const count = useSelector((state: RootState) => state.counter.value);
return <p>Count: {count}</p>;
}useDispatch — Actions のディスパッチ
useDispatch() は store の dispatch 関数を返します。state を変更するには、action creator とともに呼び出します。
import { useDispatch } from 'react-redux';
import { increment, incrementBy } from './counterSlice';
function Controls() {
const dispatch = useDispatch();
return (
<div>
<button onClick={() => dispatch(increment())}>+1</button>
<button onClick={() => dispatch(incrementBy(5))}>+5</button>
</div>
);
}createAsyncThunk — 非同期 Actions
RTK の createAsyncThunk は非同期処理(API 呼び出し)を処理し、pending/fulfilled/rejected アクションを自動的にディスパッチします。
import { createAsyncThunk } from '@reduxjs/toolkit';
export const fetchUser = createAsyncThunk(
'user/fetchById',
async (userId: string) => {
const res = await fetch(`/api/users/${userId}`);
return res.json(); // becomes action.payload on fulfilled
}
);
// In slice:
extraReducers: (builder) => {
builder
.addCase(fetchUser.pending, state => { state.loading = true; })
.addCase(fetchUser.fulfilled, (state, action) => {
state.loading = false;
state.user = action.payload;
});
}RTK Query — 組み込みのデータ取得
RTK Query(RTK の一部)は、データの取得、キャッシュ、無効化を自動的に行います。API エンドポイントを定義すると、生成されたフックを利用できます。
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
export const api = createApi({
baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
endpoints: (build) => ({
getUsers: build.query<User[], void>({ query: () => 'users' }),
})
});
// Generated hook:
const { data, isLoading, error } = api.useGetUsersQuery();Reducer 内の Immer
RTK は内部で Immer を使用するため、slice の reducer では state を直接変更できます。Immer が変更を検出して新しい不変の state オブジェクトを生成するため、変更のような書きやすさと不変性の安全性を両立できます。
Redux DevTools
Redux DevTools のブラウザー拡張機能を使うと、ディスパッチされたすべての action、結果として得られた state、さらにタイムトラベルまで確認できます。つまり、任意の過去の state に移動できます。複雑な state の流れをデバッグするうえで非常に役立ちます。
クイックチェック
Redux Toolkit の createSlice は何を自動的に生成しますか?
まとめ: Redux Toolkit
createSlice は 1 つの定義に reducer と actions をまとめます。Immer により、state を安全に「変更」できます。configureStore は DevTools と thunk を備えた reducer を組み立てます。useSelector は state を読み取ります。useDispatch は actions をディスパッチします。非同期処理には createAsyncThunk を使用します。RTK Query はキャッシュを備えたデータ取得全体を担います。
AI チューターと学ぶ HTML — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 41
- レッスン
- 163
よくある質問
「Redux Toolkit:createSlice と configureStore」レッスンは無料ですか?
はい。「Redux Toolkit:createSlice と configureStore」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Frontend Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Frontend Academyコースには全4レッスンが含まれています。
「Redux Toolkit:createSlice と configureStore」で何を学びますか?
createSlice で state のスライスを定義し、configureStore でまとめ、useDispatch と useSelector を使って React コンポーネントからアクションを dispatch します。 ブラウザで直接実行するハンズオンコードでFrontend Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Frontend Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのFrontend Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Redux Toolkit:createSlice と configureStore」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このFrontend Academyレッスンでコードを書いて実行できますか?
はい。すべてのFrontend Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Redux Toolkit:createSlice と configureStore
- 軽量な React 状態管理のための Zustand
- Vue の Pinia:defineStore と storeToRefs
- グローバル状態とローカル状態の使い分け