redux 错误:固定失败:在路径[...] - ReactNative中,在调度之间检测到状态变化

5cg8jx4n  于 2023-05-23  发布在  React
关注(0)|答案(1)|浏览(143)

我正在使用Redux构建ReactNative应用程序,遇到了一个让我头疼的问题。尝试将状态重置为初始状态时收到以下错误:
Error: Invariant failed: A state mutation was detected between dispatches, in the path 'recievedData.data.stem.ControlMeasurementDefinition'. This may cause incorrect behaviour. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)]
我在一个进程中通过向数组添加元素来设置redux状态,当我试图将其重置为初始状态[]时,它给了我上面提到的错误。我正在使用ReactNative与Expo,当直接通过ExpoGo测试应用程序时,该错误不会阻止应用程序正常工作。然而,当我安装一个APK文件并运行它时,应用程序会卡在一个闪屏上。
先谢谢你的帮助。
编辑:
这里是代码快照...

const initialState = {
  data: {}
};

// reducer

const recievedDataReducer = (state = initialState, action) => {
  switch(action.type) {
    case SET_RECIEVED_DATA:
      return {
        ...state,
        data: action.payload,
      };
    case RESET_RECIEVED_DATA:
      return initialState;
    default:
      return {
        ...state
      };
  }
}
// actions

export const setRecievedData = (data) => ({
  type: SET_RECIEVED_DATA,
  payload: data
});

export const resetRecievedData = () => ({
  type: RESET_RECIEVED_DATA,
  payload: []
})

使用setRecievedData更新状态,每次状态更改时都会调用此操作。我唯一使用resetRecievedData的时候是我想重置状态的时候。这就是我收到错误的地方。

vsdwdz23

vsdwdz231#

1.你发送了一个你不处理的payload(你可以在这里删除payload)

export const resetRecievedData = () => ({
  type: RESET_RECIEVED_DATA,
  payload: [] // Can be removed
})

1.在数据初始状态是一个对象,而不是一个数组:

const initialState = {
  data: {} // Replace {} with []
};

相关问题