react-table 从数据中的多个电子邮件地址获取默认电子邮件地址(打字稿)

react-table get default email address from multiple email addresses in data (typescript)

我希望能够通过从 API

收到的数据访问默认电子邮件

我有一个这样表示的数据:

{
  "id": "123",
  "firstName": "Man",
  "lastName": "Stranger",
  "emailAddresses": [
    {
      "email": "manStranger1@gmail.com",
      "isDefault": true
    },
    {
      "email": "manStranger2@gmail.com",
      "isDefault": false
    },
}

目前我只能在我的 react-table 中显示电子邮件,如下所示:

  const columns: Array<any> = useMemo(
    () => [
      {
        Header: 'Email',
        accessor: 'emailAddresses[0].email',
      },
    ],
    [],
  );

但是,不保证 I[0] 始终是默认电子邮件。 通常我会收到这样的默认电子邮件:

data.emailAddresses.filter((x) =>
 x.isDefault === true).map((data: MemberDataStore.EmailAddresses, index) =>
 data.email

但此方法不适用于 react-table 数据

您可以使用 Cell 并在 原始 row 数据上使用 Array.find 方法:

{
  id: 'defaultEmail', // Write some unique id as we don't have accessor 
  Header: 'Email',
  Cell: ({row}) => (
    <span>
      {row.original.emailAddresses.find((e) => e.isDefault)?.email ??
        'No default email'}
    </span>
  ),
},

并且如果您收到 的 TS 警告,隐式具有 rowe 的 'any' 类型 ,您可以修复类型:

import {Column} from 'react-table'
const columns = useMemo<Column[]>(
  () => [
    { 
      // ..
      Cell: ({row}) => {
        const {emailAddresses} = row.original as InterfaceOrTypeOfData
        return (<span>
          {emailAddresses.find((e) => e.isDefault)?.email ?? 'No default email'}
        </span>)
      }
    },
    // ...
  ],
  [],
);