diff --git a/src/dataset/DatasetListPage.tsx b/src/dataset/DatasetListPage.tsx index de4768f0a53152e7ea5ffc1526041f696683b52c..e3e2c49471a5ff7c850e26800a818e237ae8749b 100644 --- a/src/dataset/DatasetListPage.tsx +++ b/src/dataset/DatasetListPage.tsx @@ -35,13 +35,15 @@ const DatasetListPage = ({location}: IDatasetListPageProps) => { // state const [datasets, setDatasets] = React.useState>(); const [filter, setFilter] = React.useState(appConfig.filter); + // memo + const {current, filterCode} = React.useMemo(() => parseLocationSearch(location), [location]); const loadData = React.useCallback((filter: string | DatasetFilter, pageR: IPageRequest): Promise> => { return DatasetService .datasetList(filter, pageR) .then((data) => { - setDatasets(data); setFilter(data.filter); + setDatasets(data); return data; }) .catch((e) => { @@ -56,11 +58,10 @@ const DatasetListPage = ({location}: IDatasetListPageProps) => { // effect React.useEffect(() => { - const {current, filterCode} = parseLocationSearch(location); if (!datasets || datasets?.filterCode !== filterCode) { loadData(filterCode || filter || datasets?.filter, current ? {page: current} : {}); } - }, [datasets, filter, loadData, location]) + }, [current, filterCode]) return datasets ? ( <> diff --git a/src/subset/SubsetListPage.tsx b/src/subset/SubsetListPage.tsx index 018f91bc1dad2e1631b0f0d8a801d1f7dabe5060..fc62111c402d2ae3b57251af853224b9f96410ef 100644 --- a/src/subset/SubsetListPage.tsx +++ b/src/subset/SubsetListPage.tsx @@ -37,14 +37,16 @@ const SubsetListPage = ({location}: ISubsetListPageProps) => { const [subsets, setSubsets] = React.useState>(); const [filter, setFilter] = React.useState(appConfig.filter as SubsetFilter); + // memo + const {current, filterCode} = React.useMemo(() => parseLocationSearch(location), [location]); // callback const loadData = React.useCallback((filter: string | SubsetFilter, pageR: IPageRequest): Promise> => { return SubsetService .list(filter, pageR) .then((data) => { - setSubsets(data); setFilter(data.filter); + setSubsets(data); return data; }) .catch((e) => { @@ -59,11 +61,10 @@ const SubsetListPage = ({location}: ISubsetListPageProps) => { // effect React.useEffect(() => { - const {current, filterCode} = parseLocationSearch(location); if (!subsets || subsets?.filterCode !== filterCode) { loadData(filterCode || filter || subsets?.filter, current ? {page: current} : {}); } - }, [filter, loadData, location, subsets]) + }, [filterCode, current]) return subsets ? ( <>