我有一個在我的 App.js 文件中使用的 useEffect 掛鉤。它將數據放入我需要在我的應用程序中使用的 redux 存儲中。但它在 useEffect 運行之前呈現,因此數據未定義。然后 useEffect 正確運行。我需要在渲染任何內容之前運行 useEffect。我怎么能那樣做?或者我應該使用什么其他解決方案?我曾嘗試完全刪除 useEffect 并只運行該操作,但這會導致它無休止地運行。這是我的代碼:function App() { const app = useSelector(state => state.app); const auth = useSelector(state => state.auth); const dispatch = useDispatch(); useEffect(() => { dispatch(authActions.checkUser()); }, [dispatch]); console.log(auth.user); //undefined return ( <ThemeProvider theme={!app.theme ? darkTheme : theme}> <CssBaseline /> <React.Fragment> {/* TODO: Display drawer only when logged in */} {/* <Drawer></Drawer> */} <Switch> <Route exact path="/" component={Login} /> <Route exact path="/dashboard"> <Dashboard user={auth.user} /> //auth.user is undefined when this gets rendered </Route> <Route exact path="/register" component={Register} /> </Switch> </React.Fragment> </ThemeProvider> );}export const checkUser = () => async dispatch => { let token = localStorage.getItem("auth-token"); if (token === null) { localStorage.setItem("auth-token", ""); token = ""; } const tokenRes = await Axios.post("http://localhost:5000/users/tokenIsValid", null, { headers: { "x-auth-token": token } }); if (tokenRes.data) { const userRes = await Axios.get("http://localhost:5000/users/", { headers: { "x-auth-token": token } }); dispatch({ type: CHECK_USER, token, user: userRes.data }); }};
在渲染組件之前運行 useEffect hook
繁星coding
2023-03-18 14:59:35