简体   繁体   English

如何将反应查询以前的数据与新数据连接起来

[英]how to concat react-query previous data with new data

I have a hook, if I scroll down it will call for new data as like infinite scroll, but when I scroll down it calls the API for new data but it is removing the previous data.我有一个钩子,如果我向下滚动,它将像无限滚动一样调用新数据,但是当我向下滚动时,它会调用新数据的 API,但它正在删除以前的数据。 I want to concat with previous data.我想与以前的数据连接。 I think it is possible by the select method of react query but how can I get the previous data我认为可以通过 react 查询的 select 方法但是我怎样才能得到以前的数据

const useActivityFeedData = (
  activityFeedPageIndex: number,
  pageSize = Config.defaultPageSize,
) =>
  useQuery(
    [ACTIVITY_FEED, activityFeedPageIndex],
    () => Api.user.getActivityFeedData(activityFeedPageIndex, pageSize),
    {
      initialData: {
        activityList: [],
      },
      keepPreviousData: true,
      select: (res: any) => ({
        activityList: res.activityList,
      }),
    },
  );

Just create a array on mounting of component like this,只需在安装这样的组件时创建一个数组,

 let [data, setData] = useState([])
useEffect(()=>{
       
    },[])

Now get axios in same useEffect现在在相同的 useEffect 中获取 axios

useEffect(()=>{
       let data = []
axios.get(`....`).then(res=>{
setData(res.data)
})
    },[])

Now after scrolling when u get new Data, just concat it to previous array.现在,当您获得新数据时滚动后,只需将其连接到上一个数组。

eg: axios.get(`...`).then(res=>{
let var = data.concat(res.data)
setData(var)
})

Then when u map Data, as it updates the page keeps scrolling.然后当你映射数据时,当它更新页面时,页面会不断滚动。

Hope this helps : )希望这可以帮助 : )

Why not something like:为什么不这样:

const useActivityFeedData = (
  activityFeedPageIndex: number,
  pageSize = Config.defaultPageSize,
) =>
  const prevData = queryClient.getQueryData([ACTIVITY_FEED,activityFeedPageIndex]).
  useQuery(
    [ACTIVITY_FEED, activityFeedPageIndex],
    () => Api.user.getActivityFeedData(activityFeedPageIndex, pageSize),
    {
      initialData: {
        activityList: [],
      },
      keepPreviousData: true,
      select: (res: any) => ({
        activityList: res.activityList,
      }),
    },
  );

and then just return the prevData with your resposnse or assign the response to a variable from useQuery, and return it.然后只需将 prevData 与您的响应一起返回,或者将响应分配给 useQuery 中的变量,然后返回它。

您确实在寻找无限查询- useInfiniteQuery是为这个确切的用例而设计的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM