【问题标题】:Drawer not navigating to next screen in React Native Navigation 5抽屉未导航到 React Native Navigation 5 中的下一个屏幕
【发布时间】:2020-07-01 16:08:12
【问题描述】:

我正在使用带有导航 5 的 react native 抽屉,我创建了一个抽屉,但是当我单击某个选项导航到下一个屏幕时,从抽屉中它给了我错误,例如“未定义不是对象.. this.props”和当我像const navigation = this.props.navigation 这样在顶部定义道具时,它会给我错误“导航未定义......” 这是放置我的内容的抽屉:

export function DrawerContent(props) {
  return (
    <DrawerContentScrollView {...props}>
      <View
        style={
          styles.drawerContent
        }
      >
        <View style={styles.userInfoSection}>
          <Avatar.Image
...            
/>
        </View>
        <Drawer.Section style={styles.drawerSection}>
          <DrawerItem
            label="Preferences"
            onPress={() => {}}
          />
          <DrawerItem
            label="Classes"
            onPress={() => this.props.navigation.navigate('ClassHome')} //Over Here I want to navigation
          />
        </Drawer.Section>
      </View>
    </DrawerContentScrollView>
  );
}

这是我放置抽屉屏风的地方:

import * as React from 'react';
import { createDrawerNavigator } from '@react-navigation/drawer';
import HomeTimeTable from './HomeTimeTable';
import {DrawerContent} from './DrawerContent';
import ClassHome from './ClassHome';
const Drawer = createDrawerNavigator();
export default class DrawerScreens extends React.Component {
    render(){
    return (
        <Drawer.Navigator drawerContent={() => <DrawerContent navigation = {this.props.navigation} />}>
        <Drawer.Screen name="HomeTimeTable" component={HomeTimeTable} />
        <Drawer.Screen name="ClassHome" component={ClassHome} />
      </Drawer.Navigator>
    );
  }
  }

【问题讨论】:

    标签: react-native react-native-navigation react-navigation-drawer react-navigation-v5 react-native-drawer


    【解决方案1】:

    您必须将propsdrawerContent 传递给您的DrawerContent,如下所示:

    import * as React from 'react';
    import { createDrawerNavigator } from '@react-navigation/drawer';
    import HomeTimeTable from './HomeTimeTable';
    import {DrawerContent} from './DrawerContent';
    import ClassHome from './ClassHome';
    const Drawer = createDrawerNavigator();
    export default class DrawerScreens extends React.Component {
      render(){
        return (
            <Drawer.Navigator drawerContent={(props) => <DrawerContent {...props}/>}> {/* pass props here */}
            <Drawer.Screen name="HomeTimeTable" component={HomeTimeTable} />
            <Drawer.Screen name="ClassHome" component={ClassHome} />
          </Drawer.Navigator>
        );
      }
    }
    

    现在,您可以直接在自定义组件中使用该道具:

    export function DrawerContent(props) {
      return (
        <DrawerContentScrollView {...props}>
          <View
            style={
              styles.drawerContent
            }
          >
            <View style={styles.userInfoSection}>
              <Avatar.Image
    ...            
    />
            </View>
            <Drawer.Section style={styles.drawerSection}>
              <DrawerItem
                label="Preferences"
                onPress={() => {}}
              />
              <DrawerItem
                label="Classes"
                onPress={() => props.navigation.navigate('ClassHome')} // user props here
              />
            </Drawer.Section>
          </View>
        </DrawerContentScrollView>
      );
    }
    

    【讨论】:

    • 它说 props 是未定义的,无论如何我通过将 DrawerContent 作为一个类找到了解决方案,因为传入的 props 来自它给我错误的类。
    【解决方案2】:

    根据documentationnavigation 属性应该默认传递给 DrawerContent。我建议这样做:

        import * as React from 'react';
        import { createDrawerNavigator } from '@react-navigation/drawer';
        import HomeTimeTable from './HomeTimeTable';
        import {DrawerContent} from './DrawerContent';
        import ClassHome from './ClassHome';
        const Drawer = createDrawerNavigator();
        export default class DrawerScreens extends React.Component {
            render(){
                return (
                   <Drawer.Navigator drawerContent={DrawerContent}>
                       <Drawer.Screen name="HomeTimeTable" component={HomeTimeTable} />
                       <Drawer.Screen name="ClassHome" component={ClassHome} />
                   </Drawer.Navigator>
                );
            }
        }
    

    【讨论】:

    • 问题出在我的 DrawerContent 函数上。
    • 您能否提供一个示例存储库以便我运行它?
    • 我通过将 DrawerContent 作为一个类找到了解决方案,因为传入其中的道具来自我的类​​,这给了我错误。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2021-10-15
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多