React Redux TypeError: недопустимая попытка распространить не повторяемый экземпляр - PullRequest
3 голосов
/ 29 марта 2019

Привет, я использую Redux Persist для сохранения и регидратации моего приложения.Это мой productsReducer:

const initialState = {
  products: [],
  id: [],
  qty: [],
  numOfItems: 0,
  totalPrice: 0,
  status: '',
  showPopup: false
};

const productsReducer = (state = initialState, action) => {
  let updatedId = [...state.id];
  let updatedQty = [...state.qty];
  let index = updatedId.indexOf(action.id);

  switch (action.type) {
    case actionTypes.FETCH_PRODUCTS_REQUEST:
      return {
        ...state,
        status: action.status
      }

    case actionTypes.FETCH_PRODUCTS_SUCCESS:
      return {
        ...state,
        status: action.status,
        products: action.products
      }

    case actionTypes.TOGGLE_POPUP:
      return {
        ...state,
        showPopup: !state.showPopup
      }
    };
    .....
}

По неизвестным мне причинам мои действия persist / REHYDRATE показывают один ключ {showPopup: true} для productsReducer.

action     
{type: "persist/REHYDRATE", payload: {…}, err: undefined, key: "root", asyncDispatch: ƒ}
  asyncDispatch: ƒ asyncDispatch(asyncAction)
  err: undefined
  key: "root"
  payload:
  productsReducer: {showPopup: true}
  userReducer: ...
  _persist: {version: -1, rehydrated: true}
  __proto__: Object
  type: "persist/REHYDRATE"

После этого FETCH_PRODUCTS_REQUEST, showproductsReducer: {showPopup: true} тоже.Это показывает, что регидратация заменила продукты Редуцера вначале.

action FETCH_PRODUCTS_REQUEST
  prev state 
    {productsReducer: {…}, userReducer: {…}, _persist: {…}}
    productsReducer: {showPopup: true}

Когда выбранные продукты вызывают productsReducer, он пытался сделать let updatedId = [...state.id].Но это не сработало, так как productsReducer имеет только состояние showPopup.Вот тогда он выдал следующую ошибку ...

TypeError: Недопустимая попытка распространить не повторяемый экземпляр.

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

...