Redux - доступ к данным другого редуктора из действия - PullRequest
0 голосов
/ 20 апреля 2019

на моем веб-сайте электронной коммерции я использую реагирование с избыточным и пожарным ресурсом для хранения данных и аутентификации, пользователь может добавить товары в корзину и затем посетить компонент корзины, но после того, как он выйдет из системы в корзине, все ещето же самое, поэтому я должен получить доступ к состоянию cardReducer из authReducer

действий аутентификации:

export const signOut = () => {
  return (dispatch, getState, {getFirebase}) => {
    const firebase = getFirebase();
    const card = getState().card
    firebase.auth().signOut().then(() => {
      dispatch({ type: 'SIGNOUT_SUCCESS', card })
    });
  }
}

редуктора карты:

const initState= []

const cardReducer = (state = initState, action) => {
  switch (action.type) {
    case 'ADD_POST':
      if (!state.includes(action.post)) {
        return [...state, action.post]; 
      }
      return state;
    case 'REMOVE_POST':
      return state.filter(post => post === action.post);
    default: return state;
  }
}

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Вам придется добавить еще один случай для очистки корзины в cardReducer.

case 'CLEAR_CART':
      return initState;

Полагаю, у вас есть файл действий корзины, в котором определено действие, которое очищает корзину

export const clearCart = () => {
  return (dispatch) => {
     dispatch({ type: 'CLEAR_CART' })
  }
}

Затем импортируйте это действие в ваш файл действий авторизации и вызовите это действие.

import { clearCart } from '..Cart Actions Path';

export const signOut = () => {
  return (dispatch, getState, {getFirebase}) => {
    const firebase = getFirebase();
    const card = getState().card
    firebase.auth().signOut().then(() => {
      dispatch({ type: 'SIGNOUT_SUCCESS', card })
      clearCart();
    });
  }
}
0 голосов
/ 20 апреля 2019

Вы можете сделать это, добавив к вашему cardReducer кейс для действия LOGOUT. Он будет срабатывать при выходе из системы, и вы можете сбросить значение до []. Э.Г.

case 'LOGOUT':
      return initState;
...