@deemaagog

Периодическая ошибка «google is not defined», почему?

Привет. Есть такой код который подключает google client library в React приложение

export const GoogleWrapperContext = React.createContext<boolean>(false);
export const GoogleWrapper: React.FC = ({ children }) => {
  const [isLoaded, setIsLoaded] = useState(false);
  useGScript(() => {
    setIsLoaded(true);
  });

  return (
    <GoogleWrapper.Provider value={isLoaded}>
      {children}
    </GoogleWrapper.Provider>
  );
};
const useGScript = (onload: () => void): void => {
  useEffect(() => {
    let script = document.createElement('script');

    script.src = 'https://accounts.google.com/gsi/client';
    script.onload = onload;
    script.async = true;
    script.defer = true;

    document.body.appendChild(script);

    return () => {
      document.body.removeChild(script);
    };
  }, []);
};


далее где то в дереве компонентов используется такой хук

export const useGoogleSignIn = (): UseGoogleSignIn => {
  const client = useRef<OAuth2Client | null>(null);
  const isLoaded = useContext(GoogleWrapperContext);

  useEffect(() => {
    if (isLoaded) {
      
      client.current = google.accounts.oauth2.initTokenClient({. // вот тут периодическая ошибка!!!!
        // тут другие свойства к проблеме не имеющие отношение
      });
    }
  }, [isLoaded, dispatch, history]);
};


У нас подключен New Relic для логирования ошибок, и пару раз на день у клиентов стабильно получаем ошибку "google is not defined". Не могу понять откуда, ведь дожидаюсь окончания загрузки скрипта, и только потом инициализирую клиент. Локально ошибка не воспроизводится сколько ни пытался
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы