【问题标题】:React Native - Send the id of the item selected in the flatlist to the new screenReact Native - 将平面列表中所选项目的 id 发送到新屏幕
【发布时间】:2021-07-04 13:38:53
【问题描述】:

我是 React Native 的新手。我正在将 API 中的数据添加到平面列表中。如何将选定的项目 ID 发送到新屏幕?这是我的主屏幕代码:

import React, { useEffect, useState } from 'react';
import { View, Text, TouchableOpacity } from 'react-native';
import { useThemedValues } from '../Theming';
import getStyles from "./Styles/HomeScreenStyles";
import Axios from '../../API/AxiosConfig'
import { FlatList } from 'react-native-gesture-handler';
import { texts, useLocalization } from "../Localization";


const HomeScreen = (props) => {

    const { styles, colors } = useThemedValues(getStyles);
    const loc = useLocalization();

    const [episodeList, setEpisodeList] = useState([])

    useEffect(() => {
        Axios.get('episode')
            .then(response => {
                let episodes = response.data.results
                setEpisodeList(episodes)
            })
            .catch(error => {
                console.log(error)
            })
    }, [])

    const _renderEpisodesItem = ({ item }) => {
        return (
            <TouchableOpacity onPress={({ item }) => {
                props.navigation.navigate("episode-detail-screen", {
                    dummy1: 1,
                });
            }}>
                <View style={styles.episodeButton}>
                    <Text style={styles.episodeText}>
                        {loc.t(texts.season)}{item.episode.slice(1, 3)} - {loc.t(texts.episode)}{item.episode.slice(4, 6)}
                    </Text>
                    <Text style={styles.episodeNameText} numberOfLines={1}>{item.name}</Text>
                </View>
            </TouchableOpacity>
        )
    } 
    
    return (
        <View style={styles.container}>                
            <FlatList
                data={episodeList}
                renderItem={_renderEpisodesItem}
                keyExtractor={item => item.id}
                style={styles.flatListContainer}
            />
        </View>
    );
};

export default HomeScreen;

我的目的是在新打开的页面上显示所选部分的信息。

【问题讨论】:

    标签: javascript react-native react-hooks react-native-flatlist react-native-navigation


    【解决方案1】:

    你可以像这样发送你的道具:

    const _renderEpisodesItem = ({ item }) => {
        return (
            <TouchableOpacity onPress={() => {
                props.navigation.navigate("episode-detail-screen", {
                    episodeId: item.id,
                });
            }}>
                //...
            </TouchableOpacity>
        )
    }
    

    然后在你的EpisodeScreen 中你可以选择这样的:

    const {episodeId} = props.route.params 
    

    如果您使用 reactnavigation,则无法阅读此https://reactnavigation.org/docs/params/

    【讨论】:

    • 当我尝试它给出这样的错误:未捕获的错误未定义不是对象(评估'item.id')
    • 哦,我的错。 onPress 里面不应该有{item}。我已经编辑了我的答案,请检查。
    • 不客气,顺便说一句,你能支持我的回答 =))
    • 我需要至少 15 个声望才能投票:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多