已触发SAVE_ORDERS_SUCCESS但Redux未保存订单状态(已定位原因)
Redux状态读取错误问题解决记录
问题背景与根源
此前遇到的问题:代码已触发SAVE_ORDERS_SUCCESS,且reducer中能打印出有效payload,但误以为Redux未保存状态。实际问题根源:错误通过useSelector(state => state.auth)访问订单数据,而订单状态实际存储在getOrdersReducer对应的reducer分支中。
相关代码展示
1. 状态分发调用代码
dispatch(getOrdersList()) .then(() => console.log('save')) .catch(err => console.log('eeeS'));
2. API请求函数
const getOrdersList = (data = {}) => { const url = `get_all_order`; const user = JSON.parse(localStorage.getItem('user')); const headers = { access_token: user.data.token }; const body = { ...data, type: data.admin_id ? null : 'super' }; return apiCall(url, body, headers).then(response => response); }; export default { getOrdersList };
3. 订单列表Reducer
import { SAVE_ORDERS_SUCCESS, SAVE_ORDERS_FAILURE, GETTING_DATA } from 'actions/types'; const initialState = { ordersData: null, isLoading: false, error: null }; export default function (state = initialState, action) { const { type, payload } = action; console.log('🚀 ~ file: getOrdersReducer.js:15 ~ payload:', payload); switch (type) { case GETTING_DATA: return { ...state, isLoading: true, error: null }; case SAVE_ORDERS_SUCCESS: return { ...state, isLoading: false, ordersData: payload.response }; case SAVE_ORDERS_FAILURE: return { ...state, isLoading: false, error: action.payload }; default: return state; } }
4. 合并Reducer
import { combineReducers } from 'redux'; import auth from './auth'; import message from './message'; import getOrdersReducer from './getOrdersReducer'; export default combineReducers({ getOrdersReducer, auth, message });
5. Action类型常量
export const GETTING_DATA = 'GETTING_DATA'; export const SET_MESSAGE = 'SET_MESSAGE'; export const CLEAR_MESSAGE = 'CLEAR_MESSAGE'; export const SAVE_ORDERS_SUCCESS = 'SAVE_ORDERS_SUCCESS'; export const SAVE_ORDERS_FAILURE = 'SAVE_ORDERS_FAILURE';
6. Store配置
import { legacy_createStore as createStore, applyMiddleware } from 'redux'; import { composeWithDevTools } from 'redux-devtools-extension'; import thunk from 'redux-thunk'; import rootReducer from './reducers'; const middleware = [thunk]; const store = createStore( rootReducer, composeWithDevTools(applyMiddleware(...middleware)) ); export default store;
内容的提问来源于stack exchange,提问作者Long.H
相关产品推荐
相关产品推荐

