Массив redux в состоянии стал неопределенным после финиша редуктора - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над проектом, который использует ответ-редукс для лицевой стороны.и есть проблема, которую я уже решаю, но я не могу понять, почему.Может ли кто-нибудь дать мне идею?

проблема в том, что я инициирую свое состояние "guidelineManagement" ниже (оно находится в guidelineManagement.js):

    const init = {
      page: 'GuidelineTableComponent',
      status: null,
      msg: [],
      error: null,
      guidelineData: [],
      data: []
    }

и у меня есть другой редуктор, обрабатывающий состояние входа в систему,это в 'login.js'.Я использую combineReducers для объединения двух редукторов.

сейчас, при каждой загрузке страницы я буду выполнять действие "fetchLoginStatus", оно загружает статус входа с сервера и дескриптор редуктора в login.js,

так, в guidelineManagement редукторе, он будет выполнять регистр по умолчанию.

моя работа выглядит так

default:
  console.log({...state})
  return {...state}

, но когда я проверяю регистратор после окончания «fetchLoginStatus»,состояние становится ниже:

до fetchLoginStatus:

guidelineManagement:
    data: Array []
    error: null
    guidelineData: Array []
    msg: Array []
    page: "GuidelineTableComponent"
    status: null
    <prototype>: Object { … }

, но после fetchLoginStatus финиш:

guidelineManagement: 
    data: Array []
    error: null
    guidelineData: Array(3) [ {…}, {…}, {…} ]
    msg: undefined
    page: "GuidelineTableComponent"
    status: "success"
    <prototype>: Object { … }

guidelineManagement.msg становится неопределенным.

и если я изменю свой регистр по умолчанию на ниже, он будет работать нормально

default:
  console.log({...state})
  return state

результат после действия fetchLoginStatus станет:

guidelineManagement: 
    data: Array []
    error: null
    guidelineData: Array(3) [ {…}, {…}, {…} ]
    msg: Array []
    page: "GuidelineInsertComponent" ​​
    status: "success"
    <prototype>: Object { … }
​

результат верный,msg остается пустым массивом.

btw, console.log в случае по умолчанию говорит, что в блоке прецедентов msg является пустым массивом, это означает, что перед возвратом msg корректно.

Кстати, в состоянии входа в систему тоже есть массив msg, в моем дизайне используется state.msg для получения ответа сервера.

и я заметил, что oтолько сообщение вызывает эту проблему.state.guidelineManagement.data и state.guidelineManagement.guidelineData также являются массивами и остаются в том же состоянии до завершения действия.

Есть идеи, что является причиной этой проблемы?

1 Ответ

0 голосов
/ 27 июня 2019

ОК, после нескольких часов поиска и отладки, я понял,

это не о return {...state}, return state и не о многих сообщениях в разных редукторах (login и guidelineManagement)

это просто небольшая ошибка, когда я создаю действие для обработки ajax-данных и уведомляю о реакции для повторного отображения страницы:

export const refreshGuideline = (status, data, msg) => ({
  type:types.GUIDELINE_REFRESH_GUIDELINE_DATA,
  status,
  data
})

и в редукторе:

    case types.GUIDELINE_REFRESH_GUIDELINE_DATA:
      state.guidelineData = action.data
      state.status = action.status
      state.msg = action.msg
      return {...state}

action.msg не определен, поэтому state.guidelineManagement.msg изменится на undefined ...

после изменения действия ниже все работает нормально.

export const refreshGuideline = (status, data, msg) => ({
  type:types.GUIDELINE_REFRESH_GUIDELINE_DATA,
  status,
  data,
  msg
})

о, и причина, по которой журнал логгерадо и после действия fetchLoginStatus, guidelineManagement.msg отличается, даже если fetchLoginStatus не изменился msg, просто потому, что refreshGuideline вызывается после вызова ajax и асинхронен .....

Я просто провожу весь день в поисках и опыте работы с назначением объектов и массивов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...