typescript 推入不可扩展数组中的数据js

s4n0splo  于 2022-11-18  发布在  TypeScript
关注(0)|答案(2)|浏览(134)

在我的Typescript代码中插入一个for循环:

var rows = [
  {
    id: '1',
    category: 'Snow',
    value: 'Jon',
    cheapSource: '35',
    cheapPrice: '35',
    amazonSource: '233'
  }
];
    var newRow = {
          id: productName,
          category: category,
          value: _value.toString(),
          cheapSource: merchantName,
          cheapPrice: lowPrice,
          amazonSource: suppData[k][2]
        };
        rows.push(...newRow);
export default function DataTable() {
  const { user } = useUser();
  return (
    <div>
      {user ? (
        <div
          style={{
            height: 400,
            width: '75%',
            backgroundColor: 'white',
            marginLeft: 'auto',
            marginRight: 'auto',
            marginTop: '50px',
            marginBottom: '50px'
          }}
        >
          <DataGrid
            rows={rows}
            columns={columns}
            pageSize={5}
            rowsPerPageOptions={[5]}
            checkboxSelection
            onRowClick={get5CatDataNoStockCheck}
          />
        </div>
      ) : (
        <div>
          <SignIn />
        </div>
      )}
    </div>
  );
}

我面临的问题是,它总是推动同一行,即使我改变的是值刚刚之前?
PS:一个简单的数组。push不可用,因为数组不是“可扩展的”

qgzx9mmu

qgzx9mmu1#

rows.push(...newRow);

这一行一开始就不起作用。这是要完成什么?-为什么要扩展newRow对象。
对于您提供的代码,rows.push()将工作(前提是您尝试推送的元素具有正确的类型-毕竟您使用了typescript,因此通过声明您的数组,它将推断出类型。(类似于{id: string, category: string, ...}[],因此如果您现在尝试推送不完全属于该类型的元素,typescript将不允许您。
但是在你给我们看的代码中,没有理由push()不能工作。从我所要处理的内容来看,我会说很有可能你试图推送错误的类型。(这会导致typesript抛出错误)--当然,rows.push(...newRow);会抛出错误,而不管typesript是什么(它就是不工作)

wj8zmpe1

wj8zmpe12#

如果你不了解自己创建的数组的结构,让我们看看rows数组的结构,这是一个对象数组:

var rows = [
  {
    id: '1',
    category: 'Snow',
    value: 'Jon',
    cheapSource: '35',
    cheapPrice: '35',
    amazonSource: '233'
  }
];

创建一个newRow变量,它是一个对象。如果你要添加它,就不需要使用spread操作符。你可以重新声明数组,或者直接推入rows数组。

方式1 -重新声明数组

var newRow = {
    id: productName,
    category: category,
    value: _value.toString(),
    cheapSource: merchantName,
    cheapPrice: lowPrice,
    amazonSource: suppData[k][2]
};

//redeclare the array

rows = [...rows, newRow];

方法2-推入行数组

rows.push(newRow)

相关问题