【发布时间】:2021-04-23 04:35:26
【问题描述】:
当我从服务器收到 401 错误时,有人可以解释为什么这段代码会调度“actions.loginSuccess”吗? 它不应该去'catch' axios 请求的一部分吗?
之前我没有使用 redux 工具包功能
const login = ({username, password}) => async dispatch => {
await axios.post(`${API_URL}/token/`, {username, password})
.then(response => {
dispatch(actions.loginSuccess({ client_id: response?.data.client_id }))
history.push('/')
})
.catch(e => {
dispatch(actions.loginError({ error: String(e) }))
})
}
//actions.js
const login = createAction('@USER/login')
const loginSuccess = createAction('@USER/login-success')
const loginError = createAction('@USER/login-error')
export const actions = {
login,
loginSuccess,
loginError
}
//reducers.js
export const userReducer = createReducer(initialState, builder => {
builder.addCase(actions.login, draft => {
draft.loading = true
})
builder.addCase(actions.loginSuccess, (draft, action) => {
draft.loading = false
draft.isLoggedIn = true
draft.data = { ...draft.data, client_id : action.client_id}
})
builder.addCase(actions.loginError, (draft, action) => {
draft.loading = false
draft.error = action.payload.error
draft.isLoggedIn = false
draft.isSignedup = false
})
}
【问题讨论】:
-
查看 axios 返回的响应,看看它是返回响应还是抛出错误。您可以在请求中使用 axios
validateResponse设置来控制哪些响应被视为错误。你可能想使用 redux-toolkit 中的createAsyncThunk函数:redux-toolkit.js.org/api/createAsyncThunk -
@LindaPaiste 问题是它返回未定义并说无法读取响应的“数据”,因为未定义。
标签: javascript reactjs redux redux-toolkit