Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
Reactjs 如何从React useEffect中的另一个函数访问状态_Reactjs_Typescript_React Hooks - Fatal编程技术网

Reactjs 如何从React useEffect中的另一个函数访问状态

Reactjs 如何从React useEffect中的另一个函数访问状态,reactjs,typescript,react-hooks,Reactjs,Typescript,React Hooks,我正在尝试访问loadAllJobs()函数中的用户名状态。我最初在useEffect中有loadClient()和loadAllJobs()。在loadAllJobs函数中,Username始终为null,因此我尝试在其上设置计时器,使其在7秒后运行,认为状态将有时间更新。这也没用。现在,我已经尝试将loadAllJobs函数粘贴到初始函数的回调中,以便在setStates也发生时发生。 这也不起作用,从我的loadAllJobs函数访问时,用户名仍然为空。 感谢您的帮助 const Clie

我正在尝试访问loadAllJobs()函数中的用户名状态。我最初在useEffect中有loadClient()和loadAllJobs()。在loadAllJobs函数中,Username始终为null,因此我尝试在其上设置计时器,使其在7秒后运行,认为状态将有时间更新。这也没用。现在,我已经尝试将loadAllJobs函数粘贴到初始函数的回调中,以便在setStates也发生时发生。 这也不起作用,从我的loadAllJobs函数访问时,用户名仍然为空。 感谢您的帮助

const ClientContextProvider = React.memo((props) => {
    const [httpState, dispatchHttp] = useReducer(HttpReducer, initialHttpState())
    const [username, setUsername] = useState(null)
    const [givenName, setGivenName] = useState(null)
    const [surname, setSurname] = useState(null)

    useEffect(() => {
        loadClient();
    }, [])

    const loadClient = () => {
        console.log('Loading client info...')
         const errorMsg = "Error, unable to get logged in client information!";
         const callbacks = {
             [Constants.SUCCESS]:   {   status: OK,
                                    callback: (responseData) => {
                                        setUsername(responseData.username)
                                        setGivenName(responseData.givenName)
                                        setSurname(responseData.surname)
                                        loadAllJobs(username);
                                }}
        };
        axiosGetRequest(process.env.REACT_MYSERVICE_API_USER_LOGIN, errorMsg, dispatchHttp, callbacks);
     }

    const loadAllJobs = (username: string) => {
        if (username === null) {
            console.log('loadAllJobs: username is undefined')
        } else {
        const errorMsg = "Error, unable to get job information for logged in client!";
    
// Function carries on, calls api again using username as part of url

}
仅仅因为状态更新是不同步的,这是行不通的。在组件生命周期的这种状态下,username仍然为null。它的值将在下一次渲染时更新,但到那时已经太晚了


但你为什么把它弄得这么复杂?只需像这样调用
loadAllJobs
,您应该会很好:
loadAllJobs(responseData.username)

以单一方式发布您的全部代码。这太令人困惑了,谢谢你。你说得对-不知道我为什么把事情复杂化了。我想我盯着它看太久了。谢谢你的帮助别担心,有时候你只是需要休息一下,然后带着全新的视角回来。发生在我们所有人身上。
  const callbacks = {
    [Constants.SUCCESS]: {
      status: OK,
      callback: responseData => {
        setUsername(responseData.username);
        setGivenName(responseData.givenName);
        setSurname(responseData.surname);
        loadAllJobs(username);
      },
    },
  };