如何使用for循环进行Fetch?

edc*_*che 5 javascript reactjs

我正在使用 React 创建一个应用程序。我必须获取一些数据。这是我的获取语句:

const [periods] = useFetch('/company/' + slug + '/waterfall?colIndexOffset=6 ');
Run Code Online (Sandbox Code Playgroud)

最后,这是一个6但我有这样的问题。我有句号,并且每个对象的这些句号都会改变。

const [period_waterfall] = useFetch('/company/' + firminfo.code + '/periods');
Run Code Online (Sandbox Code Playgroud)

我从那里调用周期,我发现周期的长度是这样的:

var length = period_waterfall.periods.length
Run Code Online (Sandbox Code Playgroud)

我应该多次调用此periodsfetch (次数length)。

我试过这个:

for (let i = 0; i < length; i++) {
        my_array.push(useFetch('/company/' + slug + '/waterfall?colIndexOffset=' + i))
      }
Run Code Online (Sandbox Code Playgroud)

但它给出了错误:React Hook“useFetch”可能会执行多次。可能是因为它是在循环中调用的。

我该如何处理?

Ste*_*ois 2

您试图在循环中调用钩子。这是一种不好的做法,也是不允许的。钩子应该总是在顶层调用。

您还使用预定义的挂钩进行数据检索。这个钩子的目的是进行一次获取。按照您的特定顺序,您需要在循环操作中执行此操作,这意味着您使用的挂钩不适合您的需要。

您可以做的是创建一个执行获取操作的函数,而不是使用挂钩。我喜欢用axios。

const getPeriods = async (offset, slug) => {
  const url = '/company/' + slug + '/waterfall?colIndexOffset=' + offset
  const response = await axios.get(url)
  return response.data
}
Run Code Online (Sandbox Code Playgroud)

在此函数中,您将获取 1 个项目。您可以重写它,以便在其中进行循环,或者可以在循环内调用它

for (let i = 0; i < length; i++) {
  my_array.push(await getPeriods(i, slug)
}
Run Code Online (Sandbox Code Playgroud)

请注意,循环正在使用await,这意味着它需要位于异步函数内。如果您不想这样,您可以随时执行以下操作:

getPeriods(i, slug).then((res) => {
  my_array.push(res.data)
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于解决您的问题。