You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中如何在登录后页面展示用户users_ID

问题分析与解决方案

你当前的核心问题是:登录成功后获取到的users_ID没有正确传递到EditFamily页面。从代码看,登录页调用了this.props.setLoggedIn但没有后续的参数传递逻辑,也没看到路由跳转的具体实现,导致目标页面拿不到数据。下面提供两种最常用的解决方式:

方式一:路由跳转时直接传递参数(适合简单场景)

假设你使用React Navigation(React Native最常用路由库),按以下步骤修改:

1. 修改登录页的登录成功逻辑

替换原handleLoginPress中登录成功的代码,改为导航跳转并携带users_ID:

handleLoginPress = async () => {
  const { users_username, users_password } = this.state;

  try {
    let response = await fetch('http://IP/CodingApp/login.php', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        users_username,
        users_password,
      }),
    });

    let responseJson = await response.json();
    console.log(responseJson);
    if (responseJson.loggedin) {
      // 导航到EditFamily并传递users_ID参数
      this.props.navigation.navigate('EditFamily', { users_ID: responseJson.users_ID });
      this.setState({ users_ID: responseJson.users_ID });
    } else {
      this.setState({ response: '用户名或密码错误' });
    }
  } catch (error) {
    console.error(error);
  }
};

2. 修改EditFamily页面接收参数

根据React Navigation版本不同,参数获取方式略有区别:

  • React Navigation v5+(函数组件):
import React from 'react';
import { View, Text } from 'react-native';

const EditFamily = ({ route }) => {
  // 从route.params中取出传递的users_ID
  const { users_ID } = route.params;
  return (
    <View>
      <Text>你的用户ID是: {users_ID}</Text>
    </View>
  );
};

export default EditFamily;
  • 旧版本React Navigation:
import React from 'react';
import { View, Text } from 'react-native';

const EditFamily = (props) => {
  // 使用getParam获取参数,第二个参数是默认值(可选)
  const users_ID = props.navigation.getParam('users_ID', '未获取到ID');
  return (
    <View>
      <Text>你的用户ID是: {users_ID}</Text>
    </View>
  );
};

export default EditFamily;

注意事项

如果登录页不在导航栈中,需要用withNavigation高阶组件包裹登录页,确保能拿到navigation props:

import { withNavigation } from 'react-navigation';

class LoginScreen extends React.Component {
  // 原登录页代码
}

export default withNavigation(LoginScreen);

方式二:全局状态管理(适合多页面共享用户信息的场景)

如果你的应用需要在多个页面使用用户ID,推荐用Context或Redux管理全局状态,这里以Context为例:

1. 创建AuthContext

新建AuthContext.js文件:

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

export const AuthContext = createContext();

export const AuthProvider = ({ children }) => {
  const [user, setUser] = useState(null);

  // 定义登录方法,存储用户信息
  const login = (userData) => {
    setUser(userData);
  };

  return (
    <AuthContext.Provider value={{ user, login }}>
      {children}
    </AuthContext.Provider>
  );
};

2. 在App入口包裹组件

修改App.js,用AuthProvider包裹导航容器:

import { AuthProvider } from './AuthContext';
import { NavigationContainer } from '@react-navigation/native';
// 其他必要导入

export default function App() {
  return (
    <AuthProvider>
      <NavigationContainer>
        {/* 你的导航栈配置 */}
      </NavigationContainer>
    </AuthProvider>
  );
}

3. 登录页调用全局登录方法

import { AuthContext } from './AuthContext';

class LoginScreen extends React.Component {
  static contextType = AuthContext;

  handleLoginPress = async () => {
    // 原请求逻辑不变
    if (responseJson.loggedin) {
      // 将用户ID存入全局状态
      this.context.login({ users_ID: responseJson.users_ID });
      this.props.navigation.navigate('EditFamily');
    }
  };
}

4. EditFamily页面从全局状态获取ID

import React, { useContext } from 'react';
import { View, Text } from 'react-native';
import { AuthContext } from './AuthContext';

const EditFamily = () => {
  const { user } = useContext(AuthContext);
  return (
    <View>
      <Text>你的用户ID是: {user?.users_ID}</Text>
    </View>
  );
};

export default EditFamily;

内容的提问来源于stack exchange,提问作者user20814900

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:50:47