Redux-从操作访问其他reduce的数据

时间:2019-04-20 18:38:34

标签: reactjs redux redux-thunk

在我的电子商务网站中,我使用redux和firebase进行反应来存储数据和身份验证,用户可以将商品添加到购物车中,然后访问购物车组件,但是在他注销购物车中的商品后,相同,所以我必须从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 :(得分:0)

您应该可以通过为cardReducer操作向您的LOGOUT添加一个案例来做到这一点。注销时将触发它,并且您可以重置为[]。例如

case 'LOGOUT':
      return initState;

答案 1 :(得分:0)

您必须在cardReducer中添加另一种情况来清除购物车。

case 'CLEAR_CART':
      return initState;

我假设您也有一个购物车操作文件,在其中定义了一个清除购物车的操作

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

然后将该动作导入到您的auth Actions文件中,然后调用该动作。

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();
    });
  }
}