Как установить и снять несколько флажков - React + JavaScript - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть компонент React, который является таблицей и имеет несколько строк, каждая с флажком. Сам компонент имеет две функции onClick, которая возвращает данные текущей строки, onChange, которая проверяет или , снимает флажок текущую строку и возвращает текущие идентификаторы выбранных / проверенных строк, т.е. ['1', '2', '3']. Я хочу, чтобы отображалось количество выбранных пользователем строк, и это должно отображаться в заголовке столбца таблицы. Короче говоря, таблица имеет несколько столбцов с разными заголовками, и я хочу добавить этот ['1', '2', '3'].length в этот заголовок.

Когда пользователь выбирает строку, я могу добавить данные, сохранив данные в хранилище избыточных данных, и по мере обновления данных хранилища избыточных данных этот компонент <Table /> повторно рендерится, что означает, что он теряет текущее проверенное состояние, но заголовок обновляется новыми данными, в которых указано, сколько строк выбрано. Проще говоря, я хочу сохранить состояние текущей таблицы проверенных / непроверенных строк (попытался обновить приставку), но выдает ошибку.

Uncaught (in promise) Invariant Violation: A state mutation was detected between dispatches, in the path fineList.0.selected.

Мой код

const historyOnChange = (event: any, props: IVariables) => {
  let currentList = props.fineList;
  let currentEvent = event;
  currentList.map((item: any, idx: any) => {
    event.map((eItem: any) => {
      if ((idx + 1).toString() === eItem && !item.selected) {
        item.selected = true;
      } else if ((idx + 1).toString() !== eItem && item.selected) {
        item.selected = false;
      }
    });
  });
  props.actions.fineList.update([...currentList]);
};

const init = async (props: IVariables) => {
  //Called when the component loads
  props.actions.fineList.update([
    {
      FineNumber: '119876543',
      source: '888',
      Date: '12 Dec 2019',
      FineType: 'Payable',
      id: '1',
      PlateNumber: '98765',
      Price: '200',
      LateCharges: 'AED',
      DiplomaticPlateNo: '0',
      PlateColour: 'Eleventh category ',
      PlateType: 'Private',
      PlateSource: '',
      OwnerTrafficNo: '1130144535',
      DriverTrafficNo: 'N/A',
      DriverLicenceNo: 'N/A',
      DriverLicenceSource: 'N/A',
      MaterialDescription: 'Exceeding speed limit by more than 10 km/h',
      AmountBeforeDiscount: 'AED 700',
    },
        {
      FineNumber: '119876543',
      source: '888',
      Date: '12 Dec 2019',
      FineType: 'Payable',
      id: '1',
      PlateNumber: '98765',
      Price: '200',
      LateCharges: 'AED',
      DiplomaticPlateNo: '0',
      PlateColour: 'Eleventh category ',
      PlateType: 'Private',
      PlateSource: '',
      OwnerTrafficNo: '1130144535',
      DriverTrafficNo: 'N/A',
      DriverLicenceNo: 'N/A',
      DriverLicenceSource: 'N/A',
      MaterialDescription: 'Exceeding speed limit by more than 10 km/h',
      AmountBeforeDiscount: 'AED 700',
    },
        {
      FineNumber: '119876543',
      source: '888',
      Date: '12 Dec 2019',
      FineType: 'Payable',
      id: '1',
      PlateNumber: '98765',
      Price: '200',
      LateCharges: 'AED',
      DiplomaticPlateNo: '0',
      PlateColour: 'Eleventh category ',
      PlateType: 'Private',
      PlateSource: '',
      OwnerTrafficNo: '1130144535',
      DriverTrafficNo: 'N/A',
      DriverLicenceNo: 'N/A',
      DriverLicenceSource: 'N/A',
      MaterialDescription: 'Exceeding speed limit by more than 10 km/h',
      AmountBeforeDiscount: 'AED 700',
    },
  ]);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...