在屏幕之间传递数据,route.params,React Native 导航
Passing data between screens, route.params, React Native navigation
我正在尝试在我的应用程序的两个屏幕之间传递一些数据。我正在使用 react-navigation 中的 route.params
(这里是文档 https://reactnavigation.org/docs/params/)。
在第一个组件中 - home.js - 我有一个包含一些数据和 FlatList 组件的数组。 Home.js 在我的应用程序中正确显示数据。
在第二个组件中 - reviewsDetails.js- 我正在尝试显示数据 /item.title/ 来自
home.js 但我有这个错误:“类型错误:无法读取未定义的属性(读取 'item')”。
我正在寻找这个问题的解决方案
这是我的代码:
home.js
import React, { useState } from 'react';
import {StyleSheet, View, Text, FlatList,TouchableOpacity} from 'react-native'
function Home({navigation}) {
const [reviews, setReviews] = useState(
[
{title:"Zelda", rating:1, body:'lorem ipsum', key:1},
{title:"Cruella", rating:1, body:'lorem ipsum', key:2},
{title:"Voldemort", rating:1, body:'lorem ipsum', key:3},
]
)
return (
<View style={styles.container}>
<FlatList
data={reviews}
renderItem={({item})=>(
<TouchableOpacity onPress={()=> navigation.navigate("reviewDetails", item)}>
<Text>{item.title}</Text>
</TouchableOpacity>
)}
/>
</View>
);
}
export default Home;
reviewDetails.js
import React from "react";
import { View, Text, Button, StyleSheet } from "react-native";
export default function ReviewDetails({ route, navigation }) {
const { item } = route.params;
return (
<View style={globalStyles.container}>
<Text>{item.title}</Text>
</View>
);
}
这是错误
image
带有源代码的 Codesandbox:link
如有任何建议,我将不胜感激
编辑。
补充信息:)
这也是我的 navigation.js:
mport { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import React from 'react';
import about from '../screens/about'
import home from '../screens/home'
import reviewDetails from '../screens/reviewDetails'
const Tab= createBottomTabNavigator();
const AppNavigator=()=>(
<Tab.Navigator>
<Tab.Screen name="about" component={about}></Tab.Screen>
<Tab.Screen name="home" component={home}></Tab.Screen>
<Tab.Screen name="reviewDetails" component={reviewDetails}></Tab.Screen>
</Tab.Navigator>
)
export default AppNavigator;
和app.js
import React from 'react';
import { NavigationContainer, useNavigation } from "@react-navigation/native";
import AppNavigator from "./navigation/navigation.js"
export default function App(){
return(
<NavigationContainer>
<AppNavigator>
</AppNavigator> </NavigationContainer>
)
}
如果它有用 - 我使用 react-navigation/native 的 6.0.2 版和 react-navigation/stack
的 6.0.7 版
您必须从 home
屏幕传递这样的参数。将它传递到一个名为 data
的对象中(可以随意命名)
onPress={() => {
navigation.navigate("reviewDetails", {
data: item,
});
}}
然后在 reviewDetails
屏幕
的下一个屏幕上获取它
const { data } = route.params;
我正在尝试在我的应用程序的两个屏幕之间传递一些数据。我正在使用 react-navigation 中的 route.params (这里是文档 https://reactnavigation.org/docs/params/)。
在第一个组件中 - home.js - 我有一个包含一些数据和 FlatList 组件的数组。 Home.js 在我的应用程序中正确显示数据。
在第二个组件中 - reviewsDetails.js- 我正在尝试显示数据 /item.title/ 来自 home.js 但我有这个错误:“类型错误:无法读取未定义的属性(读取 'item')”。
我正在寻找这个问题的解决方案
这是我的代码:
home.js
import React, { useState } from 'react';
import {StyleSheet, View, Text, FlatList,TouchableOpacity} from 'react-native'
function Home({navigation}) {
const [reviews, setReviews] = useState(
[
{title:"Zelda", rating:1, body:'lorem ipsum', key:1},
{title:"Cruella", rating:1, body:'lorem ipsum', key:2},
{title:"Voldemort", rating:1, body:'lorem ipsum', key:3},
]
)
return (
<View style={styles.container}>
<FlatList
data={reviews}
renderItem={({item})=>(
<TouchableOpacity onPress={()=> navigation.navigate("reviewDetails", item)}>
<Text>{item.title}</Text>
</TouchableOpacity>
)}
/>
</View>
);
}
export default Home;
reviewDetails.js
import React from "react";
import { View, Text, Button, StyleSheet } from "react-native";
export default function ReviewDetails({ route, navigation }) {
const { item } = route.params;
return (
<View style={globalStyles.container}>
<Text>{item.title}</Text>
</View>
);
}
这是错误 image
带有源代码的 Codesandbox:link
如有任何建议,我将不胜感激
编辑。
补充信息:)
这也是我的 navigation.js:
mport { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import React from 'react';
import about from '../screens/about'
import home from '../screens/home'
import reviewDetails from '../screens/reviewDetails'
const Tab= createBottomTabNavigator();
const AppNavigator=()=>(
<Tab.Navigator>
<Tab.Screen name="about" component={about}></Tab.Screen>
<Tab.Screen name="home" component={home}></Tab.Screen>
<Tab.Screen name="reviewDetails" component={reviewDetails}></Tab.Screen>
</Tab.Navigator>
)
export default AppNavigator;
和app.js
import React from 'react';
import { NavigationContainer, useNavigation } from "@react-navigation/native";
import AppNavigator from "./navigation/navigation.js"
export default function App(){
return(
<NavigationContainer>
<AppNavigator>
</AppNavigator> </NavigationContainer>
)
}
如果它有用 - 我使用 react-navigation/native 的 6.0.2 版和 react-navigation/stack
的 6.0.7 版您必须从 home
屏幕传递这样的参数。将它传递到一个名为 data
的对象中(可以随意命名)
onPress={() => {
navigation.navigate("reviewDetails", {
data: item,
});
}}
然后在 reviewDetails
屏幕
const { data } = route.params;