【发布时间】:2021-03-18 21:19:38
【问题描述】:
我正在学习反应,并给出了这个使用 SWR 从 API 获取一些项目并使用 fluentuiDetailedList 显示带有组的项目的简单示例 - 我遇到了组问题。
每当我单击 UI 中的组以折叠/取消折叠时,这似乎会触发重新渲染,然后组件将再次 createGroups(data) 在重新计算组对象时将 UI 再次重置为原始状态。
我应该在哪里实际存储/计算我的数据的组信息?最初需要创建它,但从那里似乎只需要在 swr api 返回新数据时重新评估它 - 然后我仍然希望从用户可能已更改的折叠组中合并当前状态在用户界面中。
是因为我不应该使用 SWR,因为它会实时刷新数据 - 并且只能在页面刷新时使用?
const SWR = ({ children, listid, onSuccess }: { children: ((args: SWRResponse<any, any>) => any), listid: string, onSuccess?: any }) => {
const url = `http://localhost:7071/api/Lists/${listid}`;
console.log(url);
const {data,error } = useSWR(url, { fetcher: fetcher, isPaused: () => listid === undefined, onSuccess });
const items = data.value;
const groups = createGroups(data)
return <... DetailsList group={groups} items={items} ... >; // ... left out a few details ...
};
【问题讨论】:
-
也可能是潜在的问题,即每当用户单击 group 上的collapse 时,swr 都会刷新数据作为重新渲染的一部分 - 这是人们想要的吗?