Redux - 从 action 访问其他 reducer 的数据
Redux - Access other reducer's data from the action
在我的电子商务网站中,我使用 react with redux 和 firebase 来存储数据和身份验证,用户可以将商品添加到购物车,然后访问购物车组件,但是在他注销购物车还是一样,所以我必须从 authReducer
访问 cardReducer
的状态
授权操作:
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;
}
}
您应该可以通过为 LOGOUT
操作向您的 cardReducer
添加案例来做到这一点。登出时会触发,可以重置为[]
。例如
case 'LOGOUT':
return initState;
您必须添加另一个案例以在 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();
});
}
}
在我的电子商务网站中,我使用 react with redux 和 firebase 来存储数据和身份验证,用户可以将商品添加到购物车,然后访问购物车组件,但是在他注销购物车还是一样,所以我必须从 authReducer
cardReducer
的状态
授权操作:
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;
}
}
您应该可以通过为 LOGOUT
操作向您的 cardReducer
添加案例来做到这一点。登出时会触发,可以重置为[]
。例如
case 'LOGOUT':
return initState;
您必须添加另一个案例以在 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();
});
}
}