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

React Native跨屏幕传参异常:HomeScreen无法获取username参数

解决React Native跨导航栈传参导致HomeScreen获取不到username的问题

问题分析

你的导航层级是:WelcomeStack -> InputName 需要跳转至 CommonScreensStack -> HomeTab -> HomeScreen。原代码直接在navigation.navigate里指定screen: "Home"是错误的——Home并非CommonScreensStack的直接子页面,而是嵌套在HomeTab下的子页面,参数无法传递到正确层级,因此HomeScreen的route.params?.username返回undefined。

解决方案

方案一:修正嵌套导航的传参方式

调整InputName页面handleName方法中的导航代码,按照嵌套层级传递参数:

const handleName = async () => {
    if (!username.trim()) {
        alert('Please fill in a name')
    } else {
        // 按导航层级传参:先跳转到CommonScreensStack的HomeTab,再传递参数给HomeScreen
        navigation.navigate("CommonScreens", {
            screen: "HomeTab",
            params: {
                screen: "Home",
                params: {
                    username: username,
                },
            },
        });
        console.log(username)
        AsyncStorage.setItem("hasSeenWelcome", "true");
    }
}

HomeScreen页面无需修改原获取逻辑,此时route.params?.username即可正确拿到值:

const HomeScreen = ({ navigation, route }) => {
    let username = route.params?.username;
    console.log(username)
    // 后续渲染逻辑
}

方案二:通过AsyncStorage读取(兜底方案)

既然已经在使用AsyncStorage存储状态,直接把username也存入,在HomeScreen中读取:

  1. InputName页面存储username:
const handleName = async () => {
    if (!username.trim()) {
        alert('Please fill in a name')
    } else {
        navigation.navigate("CommonScreens", { screen: "HomeTab" });
        console.log(username)
        await AsyncStorage.setItem("hasSeenWelcome", "true");
        await AsyncStorage.setItem("username", username);
    }
}
  1. HomeScreen页面读取:
import { useEffect, useState } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';

const HomeScreen = ({ navigation, route }) => {
    const [username, setUsername] = useState('');

    useEffect(() => {
        const fetchUsername = async () => {
            const storedName = await AsyncStorage.getItem("username");
            if (storedName) {
                setUsername(storedName);
                console.log(storedName);
            }
        };
        fetchUsername();
    }, []);

    // 后续渲染逻辑
}

注意事项

  • 上述代码适配React Navigation v5/v6版本的嵌套传参语法。
  • 使用AsyncStorage时必须处理异步操作,用async/await避免数据未读取完成就渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:10:51