0

我正在使用带有导航 5 的反应原生抽屉,我已经创建了一个抽屉,但是当我单击某些选项导航到下一个屏幕时,从抽屉中它给了我错误,例如“未定义不是对象 ..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>
    );
  }
  }
4

2 回答 2

1

您必须props从以下传递drawerContent到您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>
  );
}
于 2020-03-20T14:23:50.637 回答
0

根据文档导航道具应默认传递给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>
            );
        }
    }
于 2020-03-20T14:15:16.433 回答