数组中的散布操作出错。 TS1005:“,”应为。打字稿

时间:2018-12-07 17:07:36

标签: javascript arrays reactjs typescript spread-syntax

我无法弄清楚在row.sections[SECTION_ID行上错过了什么。它总是向我显示错字错误','...

  

常见问题解答:sections-是一个包含objects的数组。在这种情况下,我   尝试修改定制创建的节的特定对象   标记SECTION_ID。

P.S。

我还尝试将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 个答案:

答案 0 :(得分:1)

您无法通过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
)

答案 1 :(得分:0)

如果要在不改变数组的情况下替换数组某个索引处的元素,则可以对数组进行浅表复制,然后在该索引处设置值。例如:

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,
  };
});