лучший способ сохранить новые данные в состоянии, не перезаписывая старые - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь сохранить новые данные, не перезаписывая предыдущее состояние, основная проблема заключается в следующем: я не могу сохранить предыдущие данные, когда мы используем модель, если не использовать другое значение в качестве хранилища (мы используем эту модель, чтобы избежать красного экрана undefined death).

Это редуктор, интересующие данные - первое значение data: logisticReceipt()

export const initialState: LogisticReportState = {
  data: logisticReceipt(),
  details: {},
  testConcat: [],
};

///// REDUCER //////////////////////////////////

const logisticsReportReducer: Reducer<LogisticReportState, Action<ACTION_TYPE>> = (
  state = initialState,
  { type, payload },
) =>
  produce(state, draft => {
    switch (type) {
      case ACTION_TYPE.SET_REPORT_LOGISTIC_DATA:
        draft.testConcat = draft.testConcat.concat(payload);
        draft.data = logisticReceipt(draft.testConcat);
        break;

      case ACTION_TYPE.FETCH_REPORT_LOGISTIC_DATA_REQUEST:
        draft.data = {};
        break;

      case ACTION_TYPE.SET_REPORT_LOGISTIC_DETAILS:
        draft.details = payload;
        break;

      case ACTION_TYPE.FETCH_REPORT_LOGISTIC_DETAILS_REQUEST:
        draft.details = {};
        break;

      default:
        break;
    }
  });

это модель, которую мы использовали, чтобы избежать неопределенной ошибки

export default (data = []) => ({ logistic: data || [] });

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

Есть лучший способ переформулировать строки draft.data, избегая использования другого состояния для сохранения предыдущих данных?

case ACTION_TYPE.SET_REPORT_LOGISTIC_DATA:
 draft.testConcat = draft.testConcat.concat(payload);
 draft.data = logisticReceipt(draft.testConcat);
 break;
...