我已经创建了一个react-table来显示通知,并且还订阅了一个事件源来获取真实的通知,但是在接收到数据之后,该表并没有刷新。
x1c 0d1x在第一个屏幕截图中,首先从数据库中检索数据以填充表。
然后在这里,在事件源发送消息之后,消息被打印到控制台,但表是空的。
下面是创建表的部分代码,特别是连接到事件源的useEffect。
const [tableData, setTableData] = useState([]);
const [tableColumns, setTableColumns] = useState<
{ Header: string; accessor: never }[]
>(new Array<{ Header: string; accessor: never }>());
// connect to event source to get real time data from msg broker
useEffect(() => {
const eventSource = new EventSource(SseApiUrl);
eventSource.onmessage = (event) => {
const newData = JSON.parse(event.data).payload;
console.log(newData);
const newTableData = tableData;
newTableData.push(newData as never);
setTableData(newTableData);
};
return () => {
eventSource.close();
};
}, [SseApiUrl]);
const data = useMemo(() => tableData, [tableData]);
const columns = useMemo(() => tableColumns, [tableColumns]);
const tableInstance = useTable({ columns, data });
const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = tableInstance;
1条答案
按热度按时间enxuqcxy1#
事实上,在与ChatGPT交谈了一会儿后,我设法解决了我的问题。另一个用户给出的答案实际上促使我提出了正确的问题。
主要问题在于事件源的useEffect。我需要创建一个新数组,在我以前的实现中,
const newTableData = TableData
仍然指向内存中的TableData。另外两个较小的问题是,第一,新数据中的列数不正确,第二,推送到表中的数据实际上是字符串而不是JSON对象。
下面是我做的编辑: