【React】React+Reduxのミニマムサンプル
はじめに
React+Reduxを久しぶりに触ったら色々と忘れていたので、取っ掛かりのミニマムサンプルを残しておきます。
モジュールのインストール
$ npx create-react-app redux-sample
$ yarn add redux react-redux redux-devtools redux-thunk redux-devtools-extension history react-router react-router-dom connected-react-router
ソースコード
Action
import { push } from 'connected-react-router'
export const setValue = value => dispatch => dispatch({ type: 'SET_VALUE', value });
export const changePage = path => dispatch => dispatch(push(path));
- 値変更用の「setValue」
- 画面遷移用の「changePage」
の2つのアクションを定義しています。
Reducer
import { combineReducers } from 'redux';
const something = (state = { value: 'initial value' }, action) => {
switch (action.type) {
case 'SET_VALUE':
return Object.assign({}, state, { value: action.value });
default:
return state;
}
};
export default combineReducers({ something });
「setValue」のReducerを定義しています。
Store
import { createStore, applyMiddleware, combineReducers } from 'redux';
import { createBrowserHistory } from 'history';
import thunk from 'redux-thunk';
import { composeWithDevTools } from 'redux-devtools-extension';
import { connectRouter, routerMiddleware } from 'connected-react-router';
import reducer from '../reducers';
export const history = createBrowserHistory();
const store = createStore(
combineReducers({
samples: reducer,
router: connectRouter(history),
}),
composeWithDevTools(applyMiddleware(routerMiddleware(history), thunk)),
);
export default store
createStoreにはReducerの関数を設定します。
あと、react-routerのルーティングをReduxで管理できるように、connected-react-routerの設定をしています。
View
import React from 'react';
import './App.css';
import { useDispatch, useSelector } from 'react-redux'
import { setValue, changePage } from './actions/';
const App = (props) => {
const samples = useSelector(state => state.samples);
const dispatch = useDispatch();
const handleClickSetValue = () => {
dispatch(setValue('new value'));
}
const handleClickChangePage = () => {
dispatch(changePage('/page'));
}
return (
<div>
<p>{samples.something.value}</p>
<button onClick={handleClickSetValue}>値更新</button>
<button onClick={handleClickChangePage}>画面遷移</button>
</div>
);
}
export default App;
ディスカッション
コメント一覧
まだ、コメントがありません