使用SWR多次获取来填充数组

Dee*_*ple 11 reactjs swr

我在 React 中有一个组件需要一组用户。我可以使用 useUwr 一次获取一个用户,如下所示:

export function Hello(id: number) {
  const { data } = useSWR('/api/user/{id}', fetcher)

  return <div>hello {data.name}!</div>
}
Run Code Online (Sandbox Code Playgroud)

我现在需要的是一组用户,所以基本上:

var users = [];  
for(var i = 0; i < 100; i++) {
   const { data } = useSWR('/api/user/{i}', fetcher); 
   users.push(data);
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是Error: Rendered more hooks than during the previous render.

我想一定有一种更智能的方法来获取 100 个用户的数据。感谢您的任何建议。

Cal*_*lam 9

function multiFetcher(...urls) {
  return Promise.all(urls.map(url => fetcher(url))
}

const { data: [data1, data2, data3] } = useSWR([url1, url2, url3], multiFetcher)
Run Code Online (Sandbox Code Playgroud)


SoG*_*gly 8

尝试这个:

function arrayFetcher(...urlArr) {
  const f = (u) => fetch(u).then((r) => r.json());
  return Promise.all(urlArr.map(f));
}

export function Hello(id: number) {
  let urlArray = [];
  for(let i = 0; i < 100; i++) {
    urlArray.push(`/api/user/${i}`);
  }
  const { data } = useSWR(urlArray, arrayFetcher);

  return (
    <ul>{data && data.map(x => <li key={x.name}>x.name</li>)}</ul>
  )
}
Run Code Online (Sandbox Code Playgroud)