gpt4 book ai didi

javascript - 购物车实现 React-Redux

转载 作者:行者123 更新时间:2023-12-04 08:08:46 30 4
gpt4 key购买 nike

我正在使用 react-redux 实现购物车。
我有两个 reducer ,
1.从数据库中获取购物车数据
2. 进行各种推车操作。
我的疑问是在通过第一个 reducer 从 DB 获取数据后,我将如何通过第二个 reducer 访问该数据以执行不同的购物车操作?
reducer 1 - 从数据库获取数据

const initialState={
loading:false,
items:[],
error:false
}

const CartFetch=(state=initialState,action)=>{
switch(action.type){

case FETCHDATA : return {
...state,loading:true ,error:false
};

case FETCHSUCCESS: return {
...state,loading:false,
items:[...action.payload]
};

case FETCHERROR : return {
...state,loading:false,error:true
};

default: return state;
}
}
获取操作
const fetch=()=>{
return {
type:FETCHDATA
}
}

const success=(user)=>{
return {
type:FETCHSUCCESS,
payload:user
}
}

const error=()=>{
return {
type:FETCHERROR
}
}

const fetchCartData=()=>{

const {id}=getCurrentUser();

return (dispatch)=>{
dispatch(fetch());
axios.get(`${api.userOperations}/cart/${id}`,{
headers:{'Authorization': getJwt()}
}).then(({data})=>{
dispatch(success(data));
}).catch(()=>{
dispatch(error())
})
}
}
reducer 2 - 购物车操作
const CartHandle=(state= ..?.. ,action)=>{

switch(action.type){

case ADD_TO_CART :
return {
......
};

case INCREMENT_CART : return {
....
};

case DECREMENT_CART: return {
......
};

case REMOVE_FROM_CART : return {
.....
};

default: return state;
}
}
}
在 Reducer 2 中,我将如何访问在 Reducer 1 中获取的数据?或者容易有什么更好的方法来实现我想要的?
联合 reducer
const allReducer=combineReducers({
Cart:CartFetch,
CartOperations: CartHandle
});
店铺
const countStore=createStore(allReducer,applyMiddleware(thunk));

<Provide store={store}>

...App.js...

</Provider>

最佳答案

问题
看来您还没有完全理解 reducer 代表什么。每个 reducer 代表一个特定的“块”或状态片。没有两个 reducer 在同一个状态片上运行/操作。换句话说,两个单独的 reducer 等于两个单独的状态切片。
解决方案
由于 reducer 表示特定的状态切片,因此它需要处理与该切片关联的所有操作。您只需要将第二个 reducer 合并到第一个 reducer 中,以便它完全管理购物车状态。

const initialState = {
loading: false,
items: [],
error: false
};

const cartReducer = (state = initialState, action) => {
switch (action.type) {
case FETCHDATA:
return {
...state,
loading: true,
error: false
};

case FETCHSUCCESS:
return {
...state,
loading: false,
items: [...action.payload]
};

case FETCHERROR:
return {
...state,
loading: false,
error: true
};

case ADD_TO_CART:
return {
// ......
};

case INCREMENT_CART:
return {
// ....
};

case DECREMENT_CART:
return {
// ......
};

case REMOVE_FROM_CART:
return {
// .....
};

default:
return state;
}
};
创建您的根 reducer,每个组合的 reducer 代表一个状态切片。
const allReducer = combineReducers({
// ... other state slice reducers
cart: cartReducer,
// ... other state slice reducers
});

关于javascript - 购物车实现 React-Redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66084267/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com