Передать значение состояния из редуктора в другой редуктор - PullRequest
0 голосов
/ 28 октября 2018

Я хочу передать значение из состояния редукции из редуктора в другой редуктор.В моем случае я хочу передать значение groups из состояния в groupReducer.js в scheduleReducer.js.Я использую combineReducers из redux для объединения между ними.

Вот мой код: groupReducer.js

...
const initialState = {
groups: [],
...
export default function(state = initialState, action) {
  switch (action.type) {
  case FETCH_GROUPS:
    return {
      ...state,
      groups: action.payload
    };
...

scheduleReducer.js

const initialState = {
  ...
}
...
export default function(state = initialState, action) {
  switch (action.type) {
  case GROUP_INFO:
    return {
      group: groupInfo(action.payload.id, SHOULD_PASS_GROUPS_FETCHED_FROM_GROUPREDUCER)
    };

Я хочу передать groups последнему редуктору. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вы можете использовать thunk для доступа к полному объекту state.Получите группы от groupReducer и затем вызовите свое действие SHOULD_PASS_GROUPS_FETCHED_FROM_GROUPREDUCER, чтобы передать эти группы sheduleReducer.

// thunk action creator, use it as a normal action creator     //
//  while dispatching                                            //
function passGroupFetchedFromGroupReducer() {
  return function (dispatch, getState) {

    // Get state object from getState(). Try console.log(getState() to get 
    // idea of the shape of what getState() returns.

    const groupsToPass = getState().groupReducer.groups;

    // Then dispatch your action with the payload
    dispatch({
     type: 'SHOULD_PASS_GROUPS_FETCHED_FROM_GROUPREDUCER',
     payload: groupsToPass
    })
  };
}

// scheduleReducer.js //
const initialState = {
  groups: [],
  ...
}
...
export default function(state = initialState, action) {
  switch (action.type) {
  case GROUP_INFO:
    return {
      ...state,
      groups: action.payload
  };
}
0 голосов
/ 28 октября 2018

Вы можете сделать что-то вроде этого.
Получить состояние вашего приложения в действии создателя и затем получить доступ к состоянию группового редуктора, чтобы получить groups

const getGroupInfo = () => (dispatch, getState) => {
  const appState = getState();
  const groups = appState.groupReducerKey.groups;
  // code...

  dispatch({
    type: ' GROUP_INFO',
    payload: {
      id:'',
      // any other data
      groups: groups,
    },
  });
};


// scheduleReducer.js
const initialState = {
  ...
}
...
export default function(state = initialState, action) {
  switch (action.type) {
  case GROUP_INFO:
  // access here 
  // action.payload.groups
    return {
      group: groupInfo(action.payload.id, action.payload.groups)
    };
  }
}  

Я предлагаю прочитать больше о совместном использовании данных между редукторамив редукционных документах: https://redux.js.org/recipes/structuringreducers/beyondcombinereducers#sharing-data-between-slice-reducers

...