React native 如何通过堆栈导航将数据传递到本机选项卡上的特定屏幕?
我正在react native中创建一个底部选项卡,它将有两个屏幕Home和News。 但首先,用户需要登录,用户数据将从登录屏幕传递到主屏幕。如何传递这些数据。利用React native 如何通过堆栈导航将数据传递到本机选项卡上的特定屏幕?,react-native,React Native,我正在react native中创建一个底部选项卡,它将有两个屏幕Home和News。 但首先,用户需要登录,用户数据将从登录屏幕传递到主屏幕。如何传递这些数据。利用 navigation.navigate('Home', {Name: Name}); 如果我只使用两个屏幕(在堆栈中登录和主屏幕),我可以成功地在主屏幕中检索数据。但是,当我更改为导航到选项卡(包括主页和新闻)时,它无法处理错误“Undefined不是对象”(评估“route.params.Name”)。 你们能告诉我我错过了哪
navigation.navigate('Home', {Name: Name});
如果我只使用两个屏幕(在堆栈中登录和主屏幕),我可以成功地在主屏幕中检索数据。但是,当我更改为导航到选项卡(包括主页和新闻)时,它无法处理错误“Undefined不是对象”(评估“route.params.Name”)。
你们能告诉我我错过了哪个部分吗
下面是app.js代码
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import HomeScreen from './homescreen';
import NewsScreen from './newsscreen';
import LoginScreen from './loginscreen';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { createStackNavigator } from '@react-navigation/stack';
const Tab = createBottomTabNavigator();
function MyTabs() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="News" component={NewsScreen} />
</Tab.Navigator>
);
}
const LoginStack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<LoginStack.Navigator screenOptions={{headerShown: false}}
initialRouteName="Login">
<LoginStack.Screen name="Login"component={LoginScreen}/>
<LoginStack.Screen name="MyTabs" component={MyTabs} />
</LoginStack.Navigator>
</NavigationContainer>
);
}
export default App;
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
从“世博会状态栏”导入{StatusBar};
从“React”导入React;
从“react native”导入{样式表、文本、视图};
从“./主屏幕”导入主屏幕;
从“./新闻屏幕”导入新闻屏幕;
从“/LoginScreen”导入LoginScreen;
从'@react-navigation/native'导入{NavigationContainer};
从“@react navigation/bottom tabs”导入{createBottomTabNavigator};
从'@react navigation/stack'导入{createStackNavigator};
const Tab=createBottomTabNavigator();
函数MyTabs(){
返回(
);
}
const LoginStack=createStackNavigator();
函数App(){
返回(
);
}
导出默认应用程序;
const styles=StyleSheet.create({
容器:{
弹性:1,
背景颜色:“#fff”,
对齐项目:“居中”,
为内容辩护:“中心”,
},
});
以下是主屏幕代码:
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
export default function HomeScreen({route, navigation}) {
var Name = route.params.Name;
return (
<View style={styles.container}>
<Text>{Name}</Text>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
从“世博会状态栏”导入{StatusBar};
从“React”导入React;
从“react native”导入{样式表、文本、视图};
导出默认功能主屏幕({路由,导航}){
var Name=route.params.Name;
返回(
{Name}
);
}
const styles=StyleSheet.create({
容器:{
弹性:1,
背景颜色:“#fff”,
对齐项目:“居中”,
为内容辩护:“中心”,
},
});
最后是登录代码:
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native';
export default function LoginScreen({navigation}) {
const Name = 'Boy';
const login = () => {
navigation.navigate('MyTabs', {Name: 'Boy'});}
return (
<View style={styles.container}>
<Text>LoginScreen</Text>
<TouchableOpacity
onPress={login}
><Text
>LOGIN</Text>
</TouchableOpacity>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
})
从“世博会状态栏”导入{StatusBar};
从“React”导入React;
从“react native”导入{样式表、文本、视图、TouchableOpacity};
导出默认函数LoginScreen({navigation}){
const Name=‘Boy’;
常量登录=()=>{
导航('MyTabs',{Name:'Boy'});}
返回(
登录屏幕
登录
);
}
const styles=StyleSheet.create({
容器:{
弹性:1,
背景颜色:“#fff”,
对齐项目:“居中”,
为内容辩护:“中心”,
},
})
我正在尝试学习如何将数据从一个屏幕传递到另一个屏幕,屏幕位于选项卡堆栈中。我希望你们能够理解这个问题,并向我提供您的意见和解决方案。谢谢。输出: 它只需要在
MyTabs
组件中做一点修改:
function MyTabs({ navigation, route }) {
const { name } = route.params;
console.log(name);
return (
<Tab.Navigator>
<Tab.Screen
name="Home"
component={() => <HomeScreen name={route.params.name} />}
/>
<Tab.Screen name="News" component={NewsScreen} />
</Tab.Navigator>
);
}
功能MyTabs({导航,路由}){
const{name}=route.params;
console.log(名称);
返回(
}
/>
);
}
以下是工作解决方案:
App.js
import*as React from'React';
从'@react-navigation/native'导入{NavigationContainer};
从'@react navigation/stack'导入{createStackNavigator};
从“@react navigation/bottom tabs”导入{createBottomTabNavigator};
从“react native”导入{Text,View,StyleSheet};
从“expo常量”导入常量;
从“./home”导入主屏幕;
从“./newscreen”导入新闻屏幕;
从“/login”导入登录筛选;
//可以从本地文件导入
const Tab=createBottomTabNavigator();
函数MyTabs({导航,路由}){
const{name}=route.params;
console.log(名称);
返回(
}
/>
);
}
const LoginStack=createStackNavigator();
函数App(){
返回(
);
}
导出默认应用程序;
登录筛选
从'react native'导入{文本、视图、样式表、TouchableOpacity};
从“React”导入React;
导出默认函数LoginScreen({navigation}){
const Name='登录屏幕的名称';
常量登录=()=>{
控制台日志(“hi”);
navigation.navigate('MyTabs',{name:name});
}
返回(
登录
);
}
Home.js
从'react native'导入{Text,View,StyleSheet};
从“React”导入React;
导出默认功能主屏幕({路线、导航、名称}){
console.log(“***”,名称)
返回(
{name}
);
}
工作示例。输出: 它只需要在
MyTabs
组件中做一点修改:
function MyTabs({ navigation, route }) {
const { name } = route.params;
console.log(name);
return (
<Tab.Navigator>
<Tab.Screen
name="Home"
component={() => <HomeScreen name={route.params.name} />}
/>
<Tab.Screen name="News" component={NewsScreen} />
</Tab.Navigator>
);
}
功能MyTabs({导航,路由}){
const{name}=route.params;
console.log(名称);
返回(
}
/>
);
}
以下是工作解决方案:
App.js
import*as React from'React';
从'@react-navigation/native'导入{NavigationContainer};
从'@react navigation/stack'导入{createStackNavigator};
从“@react navigation/bottom tabs”导入{createBottomTabNavigator};
从“react native”导入{Text,View,StyleSheet};
从“expo常量”导入常量;
从“./home”导入主屏幕;
从“./newscreen”导入新闻屏幕;
从“/login”导入登录筛选;
//可以从本地文件导入
const Tab=createBottomTabNavigator();
函数MyTabs({导航,路由}){
const{name}=route.params;
console.log(名称);
返回(
}
/>
);
}
const LoginStack=createStackNavigator();
函数App(){
返回(
);
}
导出默认应用程序;
登录筛选
import{文本、视图、样式表、Touchabl