react-native - 通过导航传递状态 React Native/Expo
问题描述
在我的 react native 应用程序中,我有一个从 postgres 服务器获取 JSON 的获取请求。此获取设置状态并通过 HomeScreen 的子项向下传递以通过组件保持状态。
在我的 UserScreen 和 OverviewScreen 中,我需要访问由 HomeScreen 的子项刷新的相同状态。如何通过导航传递此道具以设置 OverviewScreen 和 UserScreen 的状态?
Navigator 是这样设置在它自己的文件中的。我应该通过这个页面设置我的获取请求并将道具传递给每个选项卡吗?
import React from 'react';
import { Platform } from 'react-native';
import { createStackNavigator, createBottomTabNavigator } from 'react-navigation';
import TabBarIcon from '../components/TabBarIcon';
import HomeScreen from '../screens/HomeScreen';
import OverviewScreen from '../screens/OverviewScreen';
import AchievementsScreen from '../screens/AchievementsScreen';
import UserScreen from '../screens/UserScreen';
const HomeStack = createStackNavigator({
Home: HomeScreen,
});
HomeStack.navigationOptions = {
tabBarLabel: 'Home',
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={
Platform.OS === 'ios'
? `ios-checkbox${focused ? '' : '-outline'}`
: 'md-checkbox'
}
/>
),
};
const OverviewStack = createStackNavigator({
Overview: OverviewScreen,
});
OverviewStack.navigationOptions = {
tabBarLabel: 'Overview',
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={Platform.OS === 'ios' ? 'ios-trending-up' : 'md-trending-up'}
/>
),
};
const AchievementsStack = createStackNavigator({
Achievements: AchievementsScreen,
});
AchievementsStack.navigationOptions = {
tabBarLabel: 'Achievments',
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={Platform.OS === 'ios' ? 'ios-star' : 'md-star'}
/>
),
};
const UserStack = createStackNavigator({
User: UserScreen,
});
UserStack.navigationOptions = {
tabBarLabel: 'Settings',
tabBarIcon: ({ focused }) => (
<TabBarIcon
focused={focused}
name={Platform.OS === 'ios' ? 'ios-information-circle-outline' : 'md-information-circle-outline'}
/>
),
};
export default createBottomTabNavigator({
HomeStack,
OverviewStack,
AchievementsStack,
UserStack,
});
解决方案
导航时,您可以将参数从一个屏幕传递到其他屏幕。您可以获取数据HomeScreen
并传递它们。在官方文档中阅读有关如何执行此操作的更多信息
从文档:
这有两个部分:
通过将参数作为函数的第二个参数放入对象中,将参数传递给路由navigation.navigate
:this.props.navigation.navigate('RouteName', { /* params go here */ })
阅读屏幕组件中的参数:this.props.navigation.getParam(paramName, defaultValue).
推荐阅读
- linux - 计算给定目录中的文件数(具有任意文件名)
- mysql - 如果从 Excel 中选择空单元格,则取消 SQL 查询的参数 - VBA
- javascript - 如何使用 MVC .NET 路由创建一致的 URL?
- python-3.x - Python 的 Socket 如何与 Nginx 一起工作,还是我不需要 Nginx?
- node.js - 打字稿中的猫鼬查询助手:查询类型上不存在属性
- python - 我在第 9 行的错误是什么?我不断收到错误“生成器”对象不可下标
- ssl - 如何配置 jfrog Artifactory Web 界面以使用 https 而不是 http
- sql - 在不永久更改数据库的情况下验证 PL/SQL
- sql - 如何在 AWS Redshift 存储过程的异常块中执行 DML 操作
- matplotlib - 我无法使用 matplotlib 绘图,因为它想使用 agg 后端。我设置了 DISPLAY=:0 但没有帮助(Linux)