I figured it out. I've added a state 'waitingForToken' that is initially true. const [user, setUser] = useState(null); const [waitingForToken, setWaitingForToken] = useState(true); const refreshToken = useCallback(refresh, []); In refresh(), I set the state to false. async function refresh() { try { const { data: { user, ...rest }, } = await axios.post('refresh-token', {}, { withCredentials: true }); setUser(user); setToken(rest); } finally { setWaitingForToken(false); } } And export it: return { user, waitingForToken, setUser, Then in my App: const App = () => { const { waitingForToken } = AuthContainer.useContainer(); return (waitingForToken ? <div/> : <Switch> <Route path="/login" component={Login} /> <ProtectedRoute exact={true} path="/" component={Dashboard} /> <ProtectedRoute path="/settings" component={Settings} /> <ProtectedRoute component={Dashboard} /> </Switch> ); Hope this can help someone!