Ошибка при распространении в массиве. TS1005: ',' ожидается. Машинопись

Я не могу понять, что я пропустил на линии row.sections[SECTION_ID, Это всегда показывает мне опечатку ','...

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ: sections - это массив с objects внутри. В этом случае я пытаюсь изменить конкретный объект из разделов, основанных с помощью пользовательского флага SECTION_ID.

PS

Я тоже пытался поставить row.sections[SECTION_ID] внутри дополнительные скобки [], но, к сожалению, это не помогает... Есть решения?

  rows: state.rows.map(
    row =>
      row.ID === action.rowID
        ? {
            ...row,
            sections: [
              ...row.sections,
              row.sections[SECTION_ID]: { // error is here
                ...row.sections[SECTION_ID],
                data: {
                  ...// some data
                }
              }
            ]
          }
        : row
  )

2 ответа

Решение

Вы не можете изменить некоторые element внутри array от spread операция таким образом. Используя этот подход, вы добавите новый, мутированный element к тому же array каждый раз. Итак, если вы хотите сделать это правильно, вам нужно использовать map итератор вместо:

rows: state.mymaps.rows.map(
    row =>
      row.ID === action.rowID
        ? {
            ...row,
            sections: row.sections.map(
              (section, index) =>
                index === JOIN_SECTION_ID
                  ? {
                      ...section,
                      data: {
                        ...section.data
                      }
                   } : section
             )
          } : row
)

Если вы пытаетесь заменить элемент по определенному индексу массива, не изменяя массив, вы можете сделать поверхностную копию массива, а затем установить значение этого индекса. Например:

state.rows.map((row) => {
  if (rowID !== action.rowID) {
    return row;
  }
  const sectionCopy = [...row.sections];
  sectionCopy[SECTION_ID] = {
    ...row.sections[SECTION_ID],
    data: {
      // some data
    },
  };
  return {
    ...row,
    sections: sectionCopy,
  };
});
Другие вопросы по тегам