Мутировавшие объекты: '( - PullRequest
0 голосов
/ 12 февраля 2020

Hello? Я хотел отобразить массив объектов в таблице данных. Я получаю свой массив объектов из моего редукса и сопоставляю их, чтобы заменить статусы. Но как-то обновился и мой редукс. Я попробовал неизменную копию Object.assign, [...]. Пожалуйста, помогите.

const convertNumberToJobUnit = (data) => {
    const Agents = Object.assign({}, data)
    return Agents.totalAgents.map(item => {
        switch(item.worker_status) {
        case 1: item.worker_status = 'Үндсэн'
            break
        case 2: item.worker_status = 'Гэрээт'
            break
        default: break
        }
        switch(item.worker_level) {
        case 1:  item.worker_level = 'New Staff'
            break
        case 2:  item.worker_level = 'Normal'
            break
        case 3:  item.worker_level = 'Good'
            break
        case 4:  item.worker_level = 'Very Good'
            break
        default: break
        }
        // item.clickEvent = () => clickEvent(item.device_id)
        item.created_date = dateConvert(item.created_date)
        Agents.jobList.map(jobItem => {
            if(item.job_id === jobItem.id) {
                item.job_id = jobItem.job_name
            }
            return jobItem
        })
        Agents.unitList.map(unitItem => {
            if(item.organizition_unit_id === unitItem.id) {
                item.organizition_unit_id = unitItem.unit_name
            }
            return unitItem
        })
        return item
    })
}

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Помимо решения @ Niraj. Избегайте мутирующих объектов при использовании массива map. Создавать новые объекты на карте, возвращать значения функции. Как видно ниже, вы можете использовать find и обновлять значение вместо карты. Надеюсь это поможет.

const convertNumberToJobUnit = data => {
  const Agents = Object.assign({}, data);
  return Agents.totalAgents.map(item => {
    let worker_status;
    let worker_level;
    switch (item.worker_status) {
      case 1:
        worker_status = "Үндсэн";
        break;
      case 2:
        worker_status = "Гэрээт";
        break;
      default:
        break;
    }
    switch (item.worker_level) {
      case 1:
        worker_level = "New Staff";
        break;
      case 2:
        worker_level = "Normal";
        break;
      case 3:
        worker_level = "Good";
        break;
      case 4:
        worker_level = "Very Good";
        break;
      default:
        break;
    }

    const job = Agents.jobList.find(jobItem => item.job_id === jobItem.id);
    const unit = Agents.unitList.find(
      unitItem => item.organizition_unit_id === unitItem.id
    );

    return {
      ...item,
      created_date: dateConvert(item.created_date),
      job_id: job ? job.job_name : item.job_id,
      organizition_unit_id: unit ? unit_name : item.organizition_unit_id,
      worker_status,
      worker_level
    };
  });
};
1 голос
/ 12 февраля 2020

Вам необходимо выполнить глубокое клонирование, а Object.assign не выполняет глубокое клонирование.

Замените эту строку const Agents = Object.assign({}, data) на const Agents = JSON.parse(JSON.stringify(data)).

Для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...