React Reduxメモ

redux github
react-redux github
redux document
history
用語集

Redux

Action


ActionCreator

bindActionCreators(actionCreators, dispatch)

actionCreatorをdispatchでラップする *
mapDispatchToProps()内で使用する。
actionCreatorsはFunctionかObjectをしているする。
Objectの場合は以下の形式にする

{
  actionCreator名: actionCreator
}


Reducer

// reducerは変更がある場合新しいstateを返す
// ない場合は既存のstateを返す
let reducer =  function (state, action) {
  if(action.type == 'foo') {
    let changedState = {};
    return changedState;
  }
  // 戻り値はマージされないので該当するデータ全体を返す必要がある
  return state;
};

stateがundefinedの場合、combineReducersに登録されている各reducerが呼ばれる
だから、最初にinitalStateがundefinedの場合、combineReducersに登録されている各reducerが呼ばれる
createStore(reducer, preloadedState, enhancer)のreducerにはcombineReducers(reducers)の戻り値が渡されることが多い。

const store = Redux.createStore(
  combineReducers({
    // fooキーに対応する値を返すreducer関数
    foo,
    // barキーに対応する値を返すreducer関数
    bar
  }),
  initialState
)


Middleware


react-redux

connect(mapStateToProps, mapDispatchToProps, mergeProps, options) *

connect(mapStateToProps, mapDispatchToProps, mergeProps, options)(Component)でstoreとcomponentが接続される

mapStateToProps(state, [ownProps])*

storeのstateをstoreに接続しているcomponentに渡されたpropsにマージするstateを返す。
storeのstateを使用しない場合はnullまたはundefinedを指定する。
storeのstateからpropsにマージするデータを抽出する処理をselectorと言う。

mapDispatchToProps(dispatch, [ownProps])*

dispatchを実行する関数を接続しているcomponentとして渡す。

bindActionCreatorsを使用した例

function mapDispatchToProps(dispatch) {
    return {
        ...bindActionCreators(actionCreators, dispatch)
    }
}

routerと一緒に使うときはwithRouterでラップする

import { withRouter } from 'react-router-dom'
export default withRouter(connect(mapStateToProps, mapDispatchToProps, mergeProps, options)(Component))


Redux Thunk

非同期処理はRedux Thunkを使用する。
thunkをmiddlewareの先頭に置く。
actionCreatorsはdispatch, getStateを引数にとる関数を返す



redux-actionsメモ