reactjs дублирующийся запросы fetch

Есть вот такой код

getinfo = async (e) => {
var userinfo = await fetch(`https://site.com?token=${token}`);
var data = await userinfo.json();
}

Но при его вызове из render запрос fetch повторяется два раза. Как это исправить?


Ответы (2 шт):

Автор решения: markak

Скорее всего вы используете StrictMode. По документации в строгом режиме происходит двойной вызов метода render. Попробуйте отключить StrictMode.

https://ru.reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects

→ Ссылка
Автор решения: Dmitry

Попробуйте вот так, забросив саму функцию и ее вызов в useEffect

import React, { useEffect } from 'react';

function your_component (){
  useEffect(()=>{
    const getinfo = async (e) => {
      var userinfo = await fetch(`https://site.com?token=${token}`);
      var data = await userinfo.json();
    };
    getinfo(e);
  },[])
  return(
    <Your_render_here />
  )
}

данный хук используется только в функциональных компонентах, но здесь можно найти пример с использованием классов. Важно, данное решение вызывается только после того как все зарендерится. Если необходимо использовать данный вызов при определенных условиях, то используется хук useState()

import React, { useState, useEffect } from 'react';

function your_component (){
  const [state, setState] = useState(false);

  useEffect(()=>{
    ......
  },[state]);
  return(
    <Your_render_here />
  )
}

при такой конструкции при изменении состояния state переменной будет вызываться функция, которая находится внутри useEffect-конструкции

→ Ссылка