Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用useRef或其他方法使auth变量在整个程序中都可用,而不会在重新渲染后更改_Javascript_Node.js_Reactjs_React Redux_React Hooks - Fatal编程技术网

Javascript 如何使用useRef或其他方法使auth变量在整个程序中都可用,而不会在重新渲染后更改

Javascript 如何使用useRef或其他方法使auth变量在整个程序中都可用,而不会在重新渲染后更改,javascript,node.js,reactjs,react-redux,react-hooks,Javascript,Node.js,Reactjs,React Redux,React Hooks,我可以使用this.auth将它与类组件一起使用,但是如何使用基于函数的组件和挂钩来实现呢 import React, { useEffect, useState } from 'react'; const GoogleAuth = () => { const [ isSignedIn, setIsSignedIn ] = useState(null); useEffect(() => { window.gapi.load('client:auth

我可以使用this.auth将它与类组件一起使用,但是如何使用基于函数的组件和挂钩来实现呢

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

const GoogleAuth = () => {
    const [ isSignedIn, setIsSignedIn ] = useState(null);

    useEffect(() => {
        window.gapi.load('client:auth2', () => {
            window.gapi.client
                .init({
                    clientId: '#ID',
                    scope: 'email'
                })
                .then(() => {
                    //THIS AUTH VARIABLE
                    const auth = window.gapi.auth2.getAuthInstance();
                    setIsSignedIn(window.gapi.auth2.getAuthInstance().isSignedIn.get());
                    auth.isSignedIn.listen(onAuthChange);
                });
        });
    }, []);

    const onAuthChange = () => {
        setIsSignedIn(window.gapi.auth2.getAuthInstance().isSignedIn.get());
    };


this.auth的钩子等价物是
useRef

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

const GoogleAuth = () => {
    const auth = useRef()
    const [ isSignedIn, setIsSignedIn ] = useState(null);

    useEffect(() => {
        window.gapi.load('client:auth2', () => {
            window.gapi.client
                .init({
                    clientId: '#ID',
                    scope: 'email'
                })
                .then(() => {
                    auth.current = window.gapi.auth2.getAuthInstance();
                    setIsSignedIn(window.gapi.auth2.getAuthInstance().isSignedIn.get());
                    auth.current.isSignedIn.listen(onAuthChange);
                });
        });
    }, []);

    const onAuthChange = () => {
        setIsSignedIn(window.gapi.auth2.getAuthInstance().isSignedIn.get());
    };


但是,由于这是身份验证数据,您可能也有兴趣查看
useContext
,或者可能有一个自定义钩子将其存储在sessionStorage或localStorage中。

您可以通过使用React-Context API来实现这一点