この記事では、create-react-app でアプリ作成後 Redux Redux toolkit で状態管理 (stateの初期化、更新、使用)する基本的な使用例を確認することができます。
ファイル構成とパッケージをインストール
create-react-app コマンドでアプリを作成後、src フォルダ下に app フォルダと features フォルダを追加しました。
src//
|-- app//
| `-- store.js
|-- features//
| `-- countSlice.js
|-- App.js
`-- index.js
react-redux と redux-toolkit パッケージをインストールします。
npm install redux-redux @reduxjs/toolkit
Redux データフロー
※ Redux Application Data Flow より
store の作成
import { createSlice } from "@reduxjs/toolkit";
const countSlice = createSlice({
name: 'count',
initialState: { count: 0 },
reducers: {
increment: (state, action) => {
state.count++;
},
decrement: (state, action) => {
state.count--;
},
multiplication: (state, action) => {
state.count = state.count * action.payload;
},
},
});
export const selectCount = (state) => state.counter.count;
export const actions = countSlice.actions;
export default countSlice.reducer;
4: name は action.type 名に使用されます。
5: state の初期化
6~16: reducer を作成
19: state を取得するときに使用します。 counter は store.js ファイル内で指定します。
21: イベント発生時に store に action を送信するときに使用します。
23: store.js ファイルで store の作成を行うときに使用します。
import { configureStore } from "@reduxjs/toolkit";
import countReducer from '../features/countSlice';
export const store = configureStore({
reducer: {
counter: countReducer,
}
})
store を作成します。
store を適応させる
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import { Provider } from 'react-redux';
import { store } from './app/store';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<Provider store={store}>
<App />
</Provider>
);
10~12: Providerコンポーネントに store を渡して、アプリコンポーネントを囲うことで、アプリコンポーネント全体から、store にアクセスすることができます。
state の使用と Action を送信
import { useSelector, useDispatch } from 'react-redux';
import { actions, selectCount } from './features/countSlice';
function App() {
const count = useSelector(selectCount)
const dispatch = useDispatch();
const increment = () => {
dispatch(actions.increment());
}
const decrement = () => {
dispatch(actions.decrement());
}
const multiplication = () => {
dispatch(actions.multiplication(2));
}
return (
<div className="App">
<p>count: {count}</p>
<button onClick={increment} > + </button>
<button onClick={decrement} > - </button>
<button onClick={multiplication}> x2 </button>
</div>
);
}
export default App;
redux-toolkit を使った書き方は、以上になります。redux-toolkitを使用しない方法は以下で紹介しています。
Redux Reactでの状態管理の基本的な使用例
2023年01月21日
React以上です。