如何解决Redux 传奇在生产中失败
我已经尝试解决这个问题超过 2 周了。在 development
模式下一切正常。但不是在 production
模式下。下面的示例使用 Redux Saga
环境显示(我还是 Redux saga 的新手)。但我已经尝试使用 Context API
重做。不幸的是,问题仍然存在。 (下图展示了开发模式下成功的过程和生产模式下不成功的过程)
我猜这可能与状态代码 304 Not Modified
有关。由于我尝试获取的数据没有改变,因此它将使用浏览器中的缓存数据。但我不知道如何设置我的服务器来处理这个问题。我已经阅读了一堆在线主题。但没有人能够解决我的问题。
你现在可以看看我的代码。 请记住,在开发模式下一切正常。从上面的图片中您可以看到我没有登录问题。只是获取和获取要在仪表板中显示的数据出错。
-
client/src/redux/actions/Dashboard.js
(操作)
import { SET_ISDASHBOARD,SET_LOADING,SET_ERROR } from '../sagas/types'
// Set Loading
export const setLoading = (status) => ({
type: SET_LOADING,payload: status
})
// Set Error
export const setError = (error) => ({
type: SET_ERROR,payload: { error: error.status,message: error.message }
})
// Dashboard
export const isDashboard = () => ({
type: SET_ISDASHBOARD
})
-
client/src/redux/reducers/Dashboard.jd
(减速器)
import { SET_ERROR,SET_ISDASHBOARD,SET_DASHBOARD } from '../sagas/types'
const initialState = {
user: {
id: '',name: '',email: ''
},loading: false,error: false,message: ''
}
const reducer = (state = initialState,action) => {
switch(action.type) {
case SET_ISDASHBOARD:
return {
...state,loading: true
}
case SET_DASHBOARD:
return {
...state,user: {
...state.user,id: action.payload.id,email: action.payload.email,name: action.payload.name
}
}
case SET_ERROR:
return {
...state,error: action.payload.status,message: action.payload.message
}
case SET_LOADING:
return {
...state,loading: action.payload
}
default:
return state
}
}
export default reducer
-
client/src/redux/sagas/handlers/dashboard.js
(Saga 处理程序)
import { call,put } from 'redux-saga/effects'
import { requestGetDashboard } from '../requests/dashboard'
import { SET_LOADING,SET_ERROR,SET_DASHBOARD } from '../types'
export function* handleGetDashboard(action) {
try {
const response = yield call(requestGetDashboard)
const result = response.data.data
console.log(response); console.log(result)
// dispatch set dashboard
yield put({ type: SET_DASHBOARD,payload: { id: result.id,email: result.email,name: result.name } })
} catch(error) {
// console.log(error); console.log(error.response)
const result = error.response.data
const payload = {
status: true,message: result.error
}
// dispatch setError
yield put({ type: SET_ERROR,payload: payload })
}
// loading to false
yield put({ type: SET_LOADING,payload: false })
}
-
client/src/redux/sagas/requests/dashboard.js
(Saga 请求)
import axios from 'axios'
/** get dashboard */
export const requestGetDashboard = () => {
return axios.get(
'/api/v1/dashboard',{
headers: {
'Content-Type': 'application/json',Authorization: `Bearer ${localStorage.getItem('uid')}`
}
}
)
}
-
client/src/redux/sagas/rootSaga.js
(Root Saga)
import {
SET_ISLOGIN,SET_ISlogoUT,SET_ISAUTH,} from './types'
import { takeLatest } from 'redux-saga/effects'
import { handleClientAuth,handlePostLogin,handlePostlogout } from './handlers/auth'
import { handleGetDashboard } from './handlers/dashboard'
export function* watcherSaga() {
// auth
yield takeLatest(SET_ISLOGIN,handlePostLogin)
yield takeLatest(SET_ISlogoUT,handlePostlogout)
yield takeLatest(SET_ISAUTH,handleClientAuth)
// dashboard
yield takeLatest(SET_ISDASHBOARD,handleGetDashboard)
}
-
client/src/redux/sagas/types.js
(类型)
/** for AUTH */
export const SET_ISLOGIN = 'SET_ISLOGIN'
export const SET_ISlogoUT = 'SET_ISlogoUT'
export const SET_ISAUTH = 'SET_ISAUTH'
export const SET_AUTH = 'SET_AUTH'
export const SET_LOADING = 'SET_LOADING'
export const SET_ERROR = 'SET_ERROR'
/** for DASHBOARD */
export const SET_ISDASHBOARD = 'SET_ISDASHBOARD'
export const SET_DASHBOARD = 'SET_DASHBOARD'
请指出任何有助于更深入了解此问题的方向。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。