更新:我想我发现了我的问题,我以某种方式通过 useSelector(state => state.auth) 访问了我的状态,但它没有保存我的 ordersReducer。
请帮助我。我有这个代码,我已经达到了
SAVE_ORDERS_SUCCESS
,但它没有保存它的状态。这是我的代码。仅供参考,我有另一个减速器来更新身份验证并且它有效。
我的电话
dispatch(getOrdersList())
.then(() => console.log('save'))
.catch(err => console.log('eeeS'));
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
};
我的减速器
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;
}
}
结合
import { combineReducers } from 'redux';
import auth from './auth';
import message from './message';
import getOrdersReducer from './getOrdersReducer';
export default combineReducers({
getOrdersReducer,
auth,
message
});
类型和存储
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';
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;
我试过 console.log
payload
以防万一 SAVE_ORDERS_SUCCESS
仍然看到它,但退货不会保存在商店中。
你不会返回一个 action 与
getOrdersList
函数只是响应。
dispatch
期望这是一个具有类型和有效载荷的对象
const { type, payload } = action;
而是只收到
response
const getOrdersList = (data = {}) => {
// ...
return apiCall(url, body, headers).then((response) => response);
};
由于减速器没有接收到
type
,它将回退到default
并返回state
。你可以通过这样做来解决这个问题:
const getOrdersList = (data = {}) => {
// ...
const data = apiCall(url, body, headers).then((response) => response);
return {
type: SAVE_ORDERS_SUCCESS,
payload: data,
};
};