更改状态后重新读取屏幕

发布于 2025-01-30 13:10:13 字数 1412 浏览 2 评论 0原文

我对usestate有问题,事实是,在状态更改之后,它不会恢复屏幕:

例如,当用户登录时,我通过我的API获取cookie,但是主页没有自动加载自动,我需要在我的vscode文件中执行ctrl + s以“更新”状态更改,从而更改页面 同样的问题如果用户要断开连接,则用户必须将页面更改为“更新”状态,或者我必须执行ctrl + s

app.js

const AuthStack = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(null);
  //Method to check if the session cookie exists on the device
  checkSessionCookie().then((isLoggedIn) => setIsLoggedIn(isLoggedIn));
  return (
    <Stack.Navigator initialRouteName="HomeScreen">
      {isLoggedIn ? (
        <>
          <Stack.Screen
            name="TabNavigator"
            component={TabNavigator}
            options={{
              headerShown: false,
            }}
          />
        </>
      ) : (
        <>
          <Stack.Screen
            name="HomeScreen"
            component={HomeScreen}
            options={{
              headerShown: false,
            }}
          />
          <Stack.Screen
            name="LoginScreen"
            component={LoginScreen}
            options={{
              headerShown: false,
            }}
          />
          <Stack.Screen
            name="RegisterScreen"
            component={RegisterScreen}
            options={{
              headerShown: false,
            }}
          />
        </>
      )}
    </Stack.Navigator>
  );
};

I have a problem with useState and the fact that it doesn't rerender the screen after a state change :

For example, when the user logs in, I get the cookie via my api, but the main page doesn't load automaticaly, I need to do a ctrl + s in my vscode file to "update" the state change and thus change the page
Same problem if the user wants to disconnect, the user must either change the page to "update" the state, or I must do a ctrl + s

App.js

const AuthStack = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(null);
  //Method to check if the session cookie exists on the device
  checkSessionCookie().then((isLoggedIn) => setIsLoggedIn(isLoggedIn));
  return (
    <Stack.Navigator initialRouteName="HomeScreen">
      {isLoggedIn ? (
        <>
          <Stack.Screen
            name="TabNavigator"
            component={TabNavigator}
            options={{
              headerShown: false,
            }}
          />
        </>
      ) : (
        <>
          <Stack.Screen
            name="HomeScreen"
            component={HomeScreen}
            options={{
              headerShown: false,
            }}
          />
          <Stack.Screen
            name="LoginScreen"
            component={LoginScreen}
            options={{
              headerShown: false,
            }}
          />
          <Stack.Screen
            name="RegisterScreen"
            component={RegisterScreen}
            options={{
              headerShown: false,
            }}
          />
        </>
      )}
    </Stack.Navigator>
  );
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓦然回首 2025-02-06 13:10:13

使用效果,因为当组件渲染时,

第一个状态将初始化并执行返回代码,然后使用使用效率
bu这个代码应该像

import {useState, useEffect} from 'react'
.
.
.
const AuthStack = () => {
    const [isLoggedIn, setIsLoggedIn] = useState(null);
    const checkIsLogedIn = () => checkSessionCookie().then((isLoggedIn) => setIsLoggedIn(isLoggedIn));
useEffect(() => {
    checkIsLogedIn();
}, []);
return (
    <Stack.Navigator initialRouteName="HomeScreen">
    {isLoggedIn ? (
        <>
        <Stack.Screen
            name="TabNavigator"
            component={TabNavigator}
            options={{
            headerShown: false,
            }}
        />
        </>
    ) : (
        <>
        <Stack.Screen
            name="HomeScreen"
            component={HomeScreen}
            options={{
            headerShown: false,
            }}
        />
        <Stack.Screen
            name="LoginScreen"
            component={LoginScreen}
            options={{
            headerShown: false,
            }}
        />
        <Stack.Screen
            name="RegisterScreen"
            component={RegisterScreen}
            options={{
            headerShown: false,
            }}
        />
        </>
    )}
    </Stack.Navigator>
);
};

Use useEffect, because when components render

The first state gets initialized and the return code is executed and then useEffect is called
bu this your code should be like

import {useState, useEffect} from 'react'
.
.
.
const AuthStack = () => {
    const [isLoggedIn, setIsLoggedIn] = useState(null);
    const checkIsLogedIn = () => checkSessionCookie().then((isLoggedIn) => setIsLoggedIn(isLoggedIn));
useEffect(() => {
    checkIsLogedIn();
}, []);
return (
    <Stack.Navigator initialRouteName="HomeScreen">
    {isLoggedIn ? (
        <>
        <Stack.Screen
            name="TabNavigator"
            component={TabNavigator}
            options={{
            headerShown: false,
            }}
        />
        </>
    ) : (
        <>
        <Stack.Screen
            name="HomeScreen"
            component={HomeScreen}
            options={{
            headerShown: false,
            }}
        />
        <Stack.Screen
            name="LoginScreen"
            component={LoginScreen}
            options={{
            headerShown: false,
            }}
        />
        <Stack.Screen
            name="RegisterScreen"
            component={RegisterScreen}
            options={{
            headerShown: false,
            }}
        />
        </>
    )}
    </Stack.Navigator>
);
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文