希望这不是一个过于基本的问题(尽管我认为可能是)。我花了几天时间试图解决这个问题,但没有运气,我是新手。
我正在尝试将 GraphQL 与 Shopify 一起使用,以生成一个反应表,其中包含我在 Shopify 上收到的订单的一堆信息。我已经能够生成我想要的数据,但我似乎无法让它为数组中的每条数据生成一个新行。
从下图中可以看出,我只是在同一个单元格中得到“#1001”、“#1002”。这是我想要在各个行上的两个不同的订单。我确定我需要以某种方式使用 .map 并告诉 react-table 推送数据,但我尝试过的任何方法似乎都不起作用,如果它确实为我提供了两个单独的行 - 但没有数据说行。
我也认为我告诉表格获取数据的方式是错误的。我需要使用标题部分中的访问器来定义我从查询中收到的某些数据。大多数访问器都不正确,除非 orderNumber、Payment、customer。这是因为我需要从 lineItems 获取信息并根据产品将其分布在多个列中。这个问题并不是关于这个令人头疼的问题,但我只是想了解为什么某些列缺少访问器。
这是我的查询:
import { gql } from '@apollo/client';
const wholesaleOrders = gql`
{
orders(first: 2, query: "tag:wholesale") {
edges {
node {
id
unpaid
fullyPaid
name
customer {
displayName
defaultAddress {
company
}
}
lineItems(first: 5) {
edges {
node {
quantity
name
}
}
}
}
}
}
}
`;
export default wholesaleOrders;
这是我的表:
import React from 'react'
import styled from 'styled-components'
import { useTable } from 'react-table'
import { graphql, Query } from 'react-apollo';
import { gql, useQuery } from '@apollo/client';
import wholesaleOrders from './QueryData.js'
function Table({ columns, data }) {
// Use the state and functions returned from useTable to build your UI
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow,
} = useTable({
columns,
data,
});
// Render the UI for your table
return (
<table {...getTableProps()}>
<thead>
{headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => (
<th {...column.getHeaderProps()}>{column.render('Header')}</th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{rows.map((row, i) => {
prepareRow(row)
return (
<tr {...row.getRowProps()} >
{row.cells.map(cell => {
return <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
})}
</tr>
)
})}
</tbody>
</table>
)
}
function DataTable() {
const columns = React.useMemo(
() => [
{
Header: 'Order',
columns: [
{
Header: 'Order',
accessor: 'orderNumber',
},
{
Header: 'Status',
accessor: 'payment'
},
{
Header: 'Customer',
accessor: 'customer'
},
],
},
{
Header: 'Wholesale 2kg',
columns: [
{
Header: 'EST',
accessor: 'lineItems'
},
{
Header: 'TB'
},
{
Header: 'BB'
},
{
Header: 'OTHER'
},
],
},
{
Header: 'Retail and Misc.',
columns: [
{
Header: '250g'
},
{
Header: 'Tea/Chocolate'
},
{
Header: 'Equipment'
},
{
Header: 'After Hours'
},
{
Header: 'Notes'
},
],
},
],
[]
)
return (
<Query
query={wholesaleOrders}>
{({ data, loading, error }) => {
if (loading) return <div>Loading…</div>;
if (error) return <div>{error.message}</div>;
console.log(data);
return (
<Table
data={[{orderNumber: data.orders.edges.map(({node}) => node.name )}]}
columns={columns}
defaultPageSize={10}
/>
);
}}
</Query>
)
}
export default DataTable;
结果如下:
抱歉,这是多么冗长,我只是想涵盖所有基础。
谢谢!