Я пытаюсь отобразить таблицу, используя реагирующую таблицу, однако эта таблица имеет различные состояния, которые извлекаются из базы данных GraphQL. Каждая кнопка должна эффективно отображать один и тот же пользовательский интерфейс для таблицы, но отображать только те отгрузки, которые имеют правильный статус, связанный с тем, на какую кнопку нажал пользователь.
Мой запрос на отправку выглядит следующим образом:
import { gql } from 'apollo-boost';
export const GET_SHIPMENTS = gql`
{
shipments {
created_at
id
status
orders {
order_items
}
}
}
`;
Мой компонент таблицы, использующий запрос GET_SHIPMENTS
, выглядит следующим образом:
import React, { useState } from "react";
import { graphql } from 'react-apollo';
import { GET_SHIPMENTS } from '../graphql/ShipmentQueries';
import ReactTable from 'react-table';
import {
Card,
CardBody,
Row,
ButtonGroup,
Button
} from "reactstrap";
function OrderTable ({ loading, shipments }) {
const [shownShipment, setShownShipment] = useState({status: "created"});
const columns = [
{
Header: 'ID',
accessor: 'id',
},
{
Header: 'Status',
accessor: 'status',
},
{
Header: 'Item Count',
accessor: 'orders[0].order_items'
},
{
Header: 'Time Stamp',
accessor: 'created_at',
},
];
if (loading) return <p>Loading...</p>;
return (
<div className="content">
<ButtonGroup className="center">
<Button
name="created"
onClick={() => setShownShipment(shownShipment.status === "created")}
>
Created
</Button>
<Button
name="awaiting driver"
onClick={() => setShownShipment(shownShipment.status === "awaiting_driver")}
>
Awaiting Driver
</Button>
<Button
name="delivered"
onClick={() => setShownShipment(shownShipment.status === "delivered")}
>
Delivered
</Button>
</ButtonGroup>
<Row className="mt-5">
<Card>
<CardBody>
<ReactTable
data={shipments}
columns={columns}
sortable={true}
resizable={false}
minRows={10}
/>
</CardBody>
</Card>
</Row>
</div>
);
}
export const OrderTableWithData = graphql(GET_SHIPMENTS, {
props: ({data: { loading, shipments, shownShipments }}) => ({
loading,
shipments,
shownShipments,
}),
})(OrderTable);
Это мое первое знакомство с использованием хуков, поэтому я знаю, что, вероятно, я их не правильно использую. Я не уверен, должен ли я использовать useEffect
крючок или нет. Я просмотрел документы Крюка и не могу найти четкого ответа. Я чувствую, что useState
должно работать. Нужно ли повторно визуализировать весь элемент ReactTable?