微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Redux 传奇在生产中失败

如何解决Redux 传奇在生产中失败

我已经尝试解决这个问题超过 2 周了。在 development 模式下一切正常。但不是在 production 模式下。下面的示例使用 Redux Saga 环境显示我还是 Redux saga 的新手)。但我已经尝试使用 Context API 重做。不幸的是,问题仍然存在。 (下图展示了开发模式下成功的过程和生产模式下不成功的过程

  • 成功development模式下

    enter image description here

  • production 模式下
  • 不成功

    enter image description here

我猜这可能与状态代码 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.jsSaga 处理程序
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.jsSaga 请求
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.jsRoot 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?