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

React Native实现第二屏向第一屏传递输入值的问题求助

React Native 跨屏幕传值问题:第二屏输入内容展示到第一屏

我正在做一个高中项目,需要用React Native把第二屏幕的输入内容展示到第一屏幕。尝试用全局变量传递值时,页面空白还触发了Hook错误。下面是两个屏幕的代码,求解决怎么把第二屏的值传到第一屏:

Screen 2(AddBookPage)

import React, { useState } from "react";
import { TextInput, View, Text, Button } from "react-native";
import ModalDropdown from 'react-native-modal-dropdown';
import BookTitle from "../values/bookTitle";

const [TitleBook, setTitleBook] = useState('')

const AddBookPage = ({navigation}) =>{
    return(
        <View>
            <Text>Enter The Book's Title</Text>
            <TextInput placeholder="Book's Title" onChangeText={newtext => setTitleBook(newtext)}></TextInput>
            <Text>Enter The Book's Author</Text>
            <TextInput placeholder="Book's Author"></TextInput>
            <ModalDropdown options={['Fiction', 'Non-Fiction', 'Fantasy', 'Mystery', 'Educational']}/>
            <Text>Enter The Book's Number Of Pages </Text>
            <TextInput placeholder="0"></TextInput>

            <Button title="Add Book" onPress={ () => {
                BookTitle = TitleBook;
                navigation.navigate('Home');
            }}></Button>
        </View>
    )
};

export default AddBookPage;

Screen 1(HomePage)

import React from 'react';
import { Button, View, Text } from 'react-native';
import BookTitle from '../values/bookTitle';

const HomePage = ({navigation}) =>{
    return(
        <View>
            <Button title='Add A Book' onPress={ () => {
                navigation.navigate('AddBook');
                }}></Button>
            <Button title='Genre'></Button>
            <Button title='History'></Button>

            <Text>User Profile</Text>
            <Text>Last Read Book : {BookTitle}</Text>
            <Text>Book Author : </Text>
            <Text>Book Genre : </Text>
            <Text>Book Total Pages : </Text>

            <Text>Total Number Of Pages Read Across All Books : </Text>
            <Text>Average Number Of Pages Read Across All Books : </Text>

        </View>
    )
};

export default HomePage;

我试过声明全局变量让两个屏幕访问来传值,但没成功。


解决方案

1. 先修复Hook错误

你把useState声明在了组件外面,违反了React Hook的规则——Hook必须在组件函数内部的顶层调用。把状态声明移到AddBookPage组件内:

const AddBookPage = ({navigation}) =>{
    // 将useState移到组件内部
    const [TitleBook, setTitleBook] = useState('')
    return(
        // 原有渲染代码
    )
};

2. 用React Navigation参数传递(最简单方案)

不需要全局变量,React Navigation自带跳转传参功能:

修改Screen 2的跳转逻辑

点击按钮时把书名作为参数传给Home页面:

<Button title="Add Book" onPress={ () => {
    navigation.navigate('Home', { lastBookTitle: TitleBook });
}}></Button>

修改Screen 1接收参数

通过route.params获取传递的值,同时处理参数为空的情况:

import React from 'react';
import { Button, View, Text } from 'react-native';

const HomePage = ({navigation, route}) =>{
    // 读取参数,默认空字符串
    const lastBookTitle = route.params?.lastBookTitle || '';
    
    return(
        <View>
            <Button title='Add A Book' onPress={ () => navigation.navigate('AddBook')}></Button>
            <Button title='Genre'></Button>
            <Button title='History'></Button>

            <Text>User Profile</Text>
            <Text>Last Read Book : {lastBookTitle}</Text>
            {/* 其余内容保持不变 */}
        </View>
    )
};

export default HomePage;

3. 持久化数据(可选,重启APP仍保留)

如果需要长期保存书籍信息,可使用AsyncStorage:

在AddBookPage中保存数据

import AsyncStorage from '@react-native-async-storage/async-storage';

// 组件内部按钮点击逻辑
<Button title="Add Book" onPress={ async () => {
    try {
        await AsyncStorage.setItem('lastBookTitle', TitleBook);
        navigation.navigate('Home');
    } catch (e) {
        console.log('保存失败:', e);
    }
}}></Button>

在HomePage中读取数据

import React, { useState, useEffect } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';

const HomePage = ({navigation}) =>{
    const [lastBookTitle, setLastBookTitle] = useState('');

    useEffect(() => {
        const fetchTitle = async () => {
            try {
                const savedTitle = await AsyncStorage.getItem('lastBookTitle');
                if (savedTitle) setLastBookTitle(savedTitle);
            } catch (e) {
                console.log('读取失败:', e);
            }
        };
        fetchTitle();
    }, []);
    
    return(
        // 用lastBookTitle展示内容
    )
};

内容的提问来源于stack exchange,提问作者Neo Kwanele Jama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:01:06