我正在尝试使用使用 React Native 的 Expo 开发 iOS 应用程序。我想在屏幕之间共享状态。我该怎么做?
尝试在 App.tsx 上使用 createContext() 和 useState() 但由于类型错误而无法使用。尝试自定义下面的解决方案,但不能仅仅因为我不知道该怎么做。 How to initialise the set function of useState for TypeScript in a createContext?
BottomTabNavigator.tsx
/**
* Learn more about createBottomTabNavigator:
* https://reactnavigation.org/docs/bottom-tab-navigator
*/
import { Ionicons } from '@expo/vector-icons';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { createStackNavigator } from '@react-navigation/stack';
import * as React from 'react';
import Colors from '../constants/Colors';
import useColorScheme from '../hooks/useColorScheme';
import TabOneScreen from '../screens/TabOneScreen';
import TabTwoScreen from '../screens/TabTwoScreen';
import { BottomTabParamList, TabOneParamList, TabTwoParamList } from '../types';
const BottomTab = createBottomTabNavigator<BottomTabParamList>();
export default function BottomTabNavigator() {
const colorScheme = useColorScheme();
return (
<BottomTab.Navigator
initialRouteName="Evaluator"
tabBarOptions={{ activeTintColor: Colors[colorScheme].tint }}>
<BottomTab.Screen
name="Evaluator"
component={TabOneNavigator}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="calculator" color={color} />,
}}
/>
<BottomTab.Screen
name="Portfolio Simulator"
component={TabTwoNavigator}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="analytics-outline" color={color} />,
}}
/>
</BottomTab.Navigator>
);
}
// You can explore the built-in icon families and icons on the web at:
// https://icons.expo.fyi/
function TabBarIcon(props: { name: React.ComponentProps<typeof Ionicons>['name']; color: string }) {
return <Ionicons size={30} style={{ marginBottom: -3 }} {...props} />;
}
// Each tab has its own navigation stack, you can read more about this pattern here:
// https://reactnavigation.org/docs/tab-based-navigation#a-stack-navigator-for-each-tab
const TabOneStack = createStackNavigator<TabOneParamList>();
function TabOneNavigator() {
return (
<TabOneStack.Navigator>
<TabOneStack.Screen
name="TabOneScreen"
component={TabOneScreen}
options={{ headerTitle: 'Evaluator' }}
/>
</TabOneStack.Navigator>
);
}
const TabTwoStack = createStackNavigator<TabTwoParamList>();
function TabTwoNavigator() {
return (
<TabTwoStack.Navigator>
<TabTwoStack.Screen
name="TabTwoScreen"
component={TabTwoScreen}
options={{ headerTitle: 'Portfolio Simulator' }}
/>
</TabTwoStack.Navigator>
);
}
TabOneScreen.tsx
import * as React from 'react';
import { StyleSheet, ScrollView, Alert } from 'react-native';
import { concat } from 'react-native-reanimated';
export default function TabOneScreen() {
const [selectedLanguage, setSelectedLanguage] = React.useState();
return (
<Container>
blah blah blah
</Container>
);
}