Partage
  • Partager sur Facebook
  • Partager sur Twitter

retourner un objet

reactjs

22 octobre 2021 à 18:06:11

salut,
aidez moi a corriger le problème ci-dessous :

comment retourner un nouvel objet a chaque fois ?

Error: [Immer] An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.
const { reducer, actions } = createSlice({
  name: 'statistics',
  initialState: {
    items: {
      devicesOnline: [],
      totalDevicesOnline: [],
      devicesOffline: [],
      totalDevicesOffline: [],
      devicesUnknow: [],
      totalDevicesUnknow: [],
      devicesIsMoving: [],
      totalIsMoving: [],
      devicesStoppedWithAccOn: [],
      totalDevicesStoppedWithAccOn: [],
      devicesStoppedWithAccOff: [],
      totalDevicesStoppedWithAccOff: [],
    },
  },
  reducers: {
    updateStatistics(state, action) {
      action.payload.forEach((item) => {
        state.items.totalDevicesOnline = item.totalDevicesOnline;
        state.items.devicesOffline = item.offline;
        state.items.totalDevicesOffline = item.totalDevicesOffline;
        state.items.devicesUnknow = item.unknow;
        state.items.totalDevicesUnknow = item.totalDevicesUnknow;
        state.items.devicesIsMoving = item.moving;
        state.items.totalIsMoving = item.totalDevicesMoving;
        state.items.devicesStoppedWithAccOn = item.accon;
        state.items.totalDevicesStoppedWithAccOn = item.totalaccon;
        state.items.devicesStoppedWithAccOff = item.accoff;
        state.items.totalDevicesStoppedWithAccOff = item.totalaccoff;
      });
      return state.items;
    },
  },
});

merci


  • Partager sur Facebook
  • Partager sur Twitter
A Vaincre sans péril on finit par triompher sans gloire  ->  le Cid de corneille
22 octobre 2021 à 18:34:38

Bonjour,

Tu crées un nouvel objet à chaque fois.

reducers: {
    updateStatistics(state, action) {
        const newState = {
            ...state
        };

        action.payload.forEach((item) => {//tu es sur de la boucle ? il n'y a que le dernier item d'enregistré
            newState.items.totalDevicesOnline = item.totalDevicesOnline;
            [...]
            newState.items.totalDevicesStoppedWithAccOff = item.totalaccoff;
        });
        return newState;
    },
},



-
Edité par piero5673 22 octobre 2021 à 18:35:04

  • Partager sur Facebook
  • Partager sur Twitter
23 octobre 2021 à 11:45:09

piero5673 a écrit:

Bonjour,

Tu crées un nouvel objet à chaque fois.

reducers: {
    updateStatistics(state, action) {
        const newState = {
            ...state
        };

        action.payload.forEach((item) => {//tu es sur de la boucle ? il n'y a que le dernier item d'enregistré
            newState.items.totalDevicesOnline = item.totalDevicesOnline;
            [...]
            newState.items.totalDevicesStoppedWithAccOff = item.totalaccoff;
        });
        return newState;
    },
},



-
Edité par piero5673 il y a environ 17 heures

salut,

j'ai finalement procedé comme ceci :

const { reducer, actions } = createSlice({
  name: 'statistics',
  initialState: {
    items: {},
  },
  reducers: {
    updateStatistics(state, action) {
      state.items = {};
      action.payload.forEach((item) => {
        return (state.items[item] = item);
      });
    },
  },
});

merci.

  • Partager sur Facebook
  • Partager sur Twitter
A Vaincre sans péril on finit par triompher sans gloire  ->  le Cid de corneille