标签: react-navigation

React Navigation + TypeScript 错误:类型“EventStackParams”不满足约束“Record<string, object |” 未定义>'

我正在将 TypeScript 添加到我的 React Native/React Navigation 5 Navigator 中,但在添加EventStackParamscreateStackNavigator().

我浏览了React Native 5 Docs、StackOverflow 和 GitHub,但没有成功。我究竟做错了什么?下面是我的错误和代码

错误:

Type 'EventStackParams' does not satisfy the constraint 'Record<string, object | undefined>'.

Index signature is missing in type 'EventStackParams'.ts(2344)
Run Code Online (Sandbox Code Playgroud)

导航.tsx:

// Imports: TypeScript Types
import { EventStackParams } from '../types/types';

// React Navigation: Stack Navigators
const RootStack = createStackNavigator();
const EventsStack = createStackNavigator<EventStackParams>();

// Events Navigator
const EventsNavigator = () => (
  <EventsStack.Navigator initialRouteName="Events">
    <EventsStack.Screen
      name="Events"
      component={Events}
      options={{
        title: …
Run Code Online (Sandbox Code Playgroud)

typescript react-native typescript-typings react-navigation react-navigation-v5

3
推荐指数
1
解决办法
3192
查看次数

Route.params 不使用 React Navigation 返回变量

我正在尝试使用 React Navigation 的route.params 将变量从一个屏幕传递到另一个屏幕。

我已经在它前面的屏幕上正常工作了,但在下一个屏幕上却失败了,我不明白为什么。

这是代码:

      setTimeout(() => {
        console.log('here is the hid: ' + results.data.hid);
        navigation.navigate('MainHome', {
          hid: results.data.hid,
        });
      }, 2500);
Run Code Online (Sandbox Code Playgroud)

控制台日志在控制台中正确显示正确的数据。此代码将导致下一个屏幕:

function Home({route, navigation}) {
  const hid = route.params;
  const [results, setResults] = useState([]);
  const [errorMessage, setErrorMessage] = useState('');
  const [loading, setLoading] = useState('loading');

  console.log('Here is the hid that is retrieved from the route params on home:' + hid);

Run Code Online (Sandbox Code Playgroud)

此控制台日志显示 hid 为未定义。

以下是引用屏幕的扩展代码:

function IntroOne({route, navigation}) {
  const [results, setResults] = useState([]);
  const [errorMessage, setErrorMessage] = …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation

3
推荐指数
1
解决办法
2112
查看次数

无法解析模块@react-navigation/stack

我创建了一个空白项目whit expo init,然后我安装了react-navigation npm install @react-navigation/native,但是expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view当我运行该应用程序时,expo start我收到此错误:无法从C:\Android\test\App.js解析模块@react-navigation/stack:在项目中找不到@react-navigation/stack。

错误截图: 在此输入图像描述

应用程序.js 文件:

import * as React from 'react';
import { View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

function HomeScreen() {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
    </View>
  );
}

const Stack = createStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen name="Home" component={HomeScreen} /> …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation

3
推荐指数
1
解决办法
1万
查看次数

如何在 React Navigation 6 的标题中输入全角文本?

在我的 React Native (Expo) 应用程序中,我想将React Navigation从 V5 升级到 V6。但是,我无法TextInput在堆栈导航器标题中设置全角。我尝试了'auto'样式'100%'的价值width,但是都没有帮助真正的宽文本框。

以下是世博小吃的复制链接:https://snack.expo.io/@vahdet/reactnavigation6-headerbarApp.js其内容如下。我想我缺乏一些弹性盒知识headerSearchBarStyle

import React, { useLayoutEffect, useState } from 'react';
import { Text, TextInput, View, StyleSheet } from 'react-native';
import { NavigationContainer, useNavigation } from '@react-navigation/native';
import { enableScreens } from 'react-native-screens';
import { AppearanceProvider } from 'react-native-appearance';
import { StatusBar } from 'expo-status-bar';
import { createStackNavigator } from '@react-navigation/stack';

enableScreens();
const HomeStack = …
Run Code Online (Sandbox Code Playgroud)

css react-native react-navigation expo react-navigation-v6

3
推荐指数
1
解决办法
2872
查看次数

如何仅在特定屏幕(例如主屏幕)上启用抽屉导航[反应本机] [反应导航]

此问题的用例是让抽屉菜单(如“设置”)仅在“主屏幕”中可用。在“主屏幕”上可能有许多按钮链接到堆栈导航的其他屏幕,其中抽屉不可用。

主要问题是如何仅在 Stack Navigator 的特定屏幕上启用抽屉导航?在下面的示例中,抽屉在堆栈的所有页面上都可用。我尝试过gestureEnabled但没有成功:

  const StackHome = () => (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={Home} />
      <Stack.Screen name="Example1" component={Example1} />
      <Stack.Screen name="Example2" component={Example2} />
    </Stack.Navigator>
  );
  <Drawer.Navigator initialRouteName="Home">
      <Drawer.Screen name="Home" component={StackHome} />
      <Drawer.Screen name="Settings" component={Settings} />
  </Drawer.Navigator>
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我尝试将其作为屏幕Drawer之一Stack,那么我总是有相同的标题栏(例如“标题”)

react-native react-navigation react-navigation-drawer react-navigation-stack react-navigation-v5

3
推荐指数
1
解决办法
3962
查看次数

如何更改 React Native 中底部选项卡导航器的高度

我正在尝试更改 React Native 中底部选项卡导航栏的高度。我已经尝试了这个Stack Overflow 问题的一些答案,但似乎没有任何效果。请帮忙。

我的代码:

export default function AppTabs({ logged }) {
  const Tabs = createBottomTabNavigator();

  return (
    <NavigationContainer>
      <SafeAreaView style={{ flex: 1 }}>
        <Tabs.Navigator
          screenOptions={({ route }) => ({
            tabBarIcon: ({ focused, color, size }) => {
              const current_color = focused ? COLORS.white : COLORS.lightGrey;

              if (route.name === "Home") {
                return <Foundation name="home" size={28} color={current_color}/>
              } else if (route.name === "Search") {
                return <Ionicons name="search" size={28} color={current_color} />
              } else if (route.name === "Library") { …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native react-navigation react-navigation-bottom-tab

3
推荐指数
1
解决办法
6781
查看次数


如何将底部选项卡导航器与抽屉式导航器结合起来

我下面的选项卡代码是底部选项卡导航器代码,我想通过渲染它在每个屏幕上显示它,就像app.js我对抽屉导航器所做的那样(简单地说,我想在屏幕上调用底部选项卡导航器)

const Stack = createStackNavigator();
const Drawer = createDrawerNavigator();
let user1=""
let data=""
export function DrwaerNav(props) {


  
  if(props.route.params!=undefined){

    console.log('props arent undefined')


    
   
 user1=props.route.params.user.auth
 data=props.route.params.user.auth


  }


  return (

      <Drawer.Navigator initialRouteName="homeS"  drawerContent={(props) => <DrawerContent props={props} data={user1}/>}
      
      screenOptions={{
        headerStyle:{
          backgroundColor:'transparent',
          },
        headerTintColor:'black',
        headerTitleStyle:{
          fontWeight:'bold',
        }
      }}
      >
 
        <Drawer.Screen name="complaints" component={complaints} 
        options={{
          title:'Home',
          headerTitleAlign:'left',
          headerRight:()=>(
            <View style={{marginEnd:10,flexDirection:'row'}}> 
           <Text style={{paddingRight:15,paddingTop:13,fontWeight:"normal",}}>{user1.email}</Text>
            <Avatar.Image 
            source={{   uri:base64.decode(user1.avatar)}} 
            size={40}
            />
{/* <Text>Email:{user1.email}</Text> */}
            </View>
          ),
        }}/>

        <Drawer.Screen name="homeS" component={homeS} options={{
          title:'Home',
          headerTitleAlign:'left',
          headerRight:()=>(
            <View style={{marginEnd:10,flexDirection:'row'}}> 
           {/* <Text style={{paddingRight:15,paddingTop:13,fontWeight:"normal",fontSize:12,}}>{user1.email}</Text> */} …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-navigation

3
推荐指数
1
解决办法
1万
查看次数

如何使用 React Navigation 6 和 expo 制作透明模式

我刚刚从 React 导航 5 升级到 6,并查看了透明模式的文档。不幸的是,我无法在模式下显示上一个屏幕。相反,我得到的是灰色背景。

我用我的代码做了一份小吃来展示我的结果:https ://snack.expo.dev/@divone/transparent-modal-not-working

我究竟做错了什么?我似乎已经拥有文档中列出的所有元素,使其可以正常工作。

我正在使用 expo SDK 43 的托管工作流程。

react-navigation expo

3
推荐指数
1
解决办法
6182
查看次数

在 React Native 中使用嵌套导航更改所有屏幕状态栏颜色的最佳方法是什么?

我目前正在使用 Expo 和 React Navigation 在我的应用程序的深色主题和浅色主题之间切换。唯一的问题是 I\xe2\x80\x99m 无法根据主题更改 iOS 上的状态栏颜色。

\n

我在抽屉导航器中嵌套了一个选项卡导航器,但是当我切换嵌套导航中所有屏幕的主题时,我\xe2\x80\x99m 无法弄清楚如何更改 iOS 上的状态栏颜色。这就是我的抽屉导航器的一部分的样子。

\n
 <themeContext.Provider value={themeData}>\n    <NavigationContainer theme={theme == 'Light' ? CustomDefaultTheme : CustomDarkTheme}>\n      <Drawer.Navigator\n        screenOptions={{\n          headerShown: false,\n          swipeEdgeWidth: 0,\n          drawerActiveBackgroundColor: '#e8e4f0',\n          drawerActiveTintColor: '#8a76b6',\n          drawerInactiveBackgroundColor: 'transparent',\n          drawerInactiveTintColor: '#bcbcc1',\n\n        }}\n
Run Code Online (Sandbox Code Playgroud)\n

ios react-native react-navigation expo

3
推荐指数
1
解决办法
1万
查看次数