インストール
npx create-react-app sampleapp npm install redux react-redux
react-reduxの目的
Reduxのstate, dispatch関数をReactのpropsで操作できるようにする
でAppを囲む - mapStateToPropsとmapDispatchToPropsを用意し、connect()に渡す
- connect()がReactコンポーネントとReduxStoreを接続し、新しいコンポーネントを返す
具体的なやり方
- コンポーネントごとに必要なstateとstateに対する処理を設計してreducerにまとめる
// この初期化のデータ構造がstoreの仕様になるイメージ const initState = { todos: [], count: 0 }; export default (state = initState, action) => { switch (action.type) { case 'ADD_TODO': { return } } }
https://react-redux.js.org/next/introduction/quick-start * reducerを呼び出すためのactionの定義とactionを生成する関数を作る(ActionCreater)
// actionはタイプ(type)と送信するデータ(何でもいい)の組み合わせ // 削除など、渡すデータが不要なら無くていい export const ADD_TODO = 'ADD_TODO' export function addTodo(text) { return { type: ADD_TODO, text }; }
- reducerをcombineReducersにまとめる
// 最終的にcombineReducersに渡すものをここでまとめる // combineReducers({ todoReducer, reducer2, reducer3 }) export const reducers = { todoReducer, reducer2, reducer3 };
- createStoreでcombineReducersを渡す
import { createStore, combineReducers, applyMiddleware } from 'redux'; import { reducers } from '../src/reducers' // combineReducersはいくつかのreducerをまとめるものです。 // 一つしかないならreducerをそのまま渡しても良い。 const store = createStore( combineReducers(reducers), )
- それぞれのcomponentで必要なstate, actionを定義して、connectする
import { connect } from 'react-redux'; // ここで定義した値は、propsでアクセスできます。 // reducerでstoreに保存した値を読み出します。 const mapStateToProps = state => { return { todos: state.todos, count: state.count } }; // ここで定義した関数は、propsでアクセスできます // 更新削除など、reducerに定義した処理を発動できます。 const mapDispatchToProps = dispatch => { return { deleteTodo: id => dispatch(deleteTodo(id)) }; }; export default connect(mapStateToProps, mapDispatchToProps)(TodoItem);