Привет. Есть такой код который подключает 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". Не могу понять откуда, ведь дожидаюсь окончания загрузки скрипта, и только потом инициализирую клиент. Локально ошибка не воспроизводится сколько ни пытался