开发者问题收集

异常:未定义不是一个对象(评估“navigation.navigate”)

2021-03-02
54

我在 Books.js 中的 Stack 导航器中有四个屏幕:

function Books(props) {
    return (
        <Stack.Navigator>
            <Stack.Screen name="Home" component={BooksMenu} />
            <Stack.Screen name="Order Book" component={BookOrder} />
            <Stack.Screen name="My Books" component={MyBooks} />
            <Stack.Screen name="Details" component={MyBooksDetails} />
        </Stack.Navigator>
    );
}

BooksMenu 屏幕,用户导航到 MyBooks 屏幕,并且从 MyBooks 有一个按钮可将用户导航到 MyBooksDetails 屏幕。

当我单击应该将用户从 MyBooks 屏幕导航到 MyBooksDetails 的按钮时,会弹出此错误。按钮操作的处理方式如下:

            <TouchableWithoutFeedback style={styles.detailsBtn}
                onPress={() => navigation.navigate('Details')} >
                <Text style={styles.detailsBtnText}>See Details</Text>
            </TouchableWithoutFeedback>

我已经在 BookCell 上用这个重构了默认的 props ,它只是 MyBooks 屏幕中的自定义组件。

function BooksCell({ navigation }) {...

包含 BookCell 组件的屏幕仍然具有默认的 props

function MyBooks(props) {...

因此,子屏幕(即组件 BooksCell )具有 navigation 作为重构的 prop,其父屏幕 MyBooks 作为默认的 props ,并且 MyBooks 的父屏幕即 BooksMenu 也具有 navigation 作为重构的prop。

function BooksMenu({ navigation }) {...

希望这有意义。我是 React Native 的新手,所以我的想法可能是错误的,但不确定如何修复它。

1个回答

破坏 ({navigation}) vs. (props) 没有区别。 重要的是在调用组件时提供的道具。代码>道具。 它没有提供Prop。

mybooksbooksmenu 将使用props navigation booksmenu /code>和 路由 由导航器渲染时。 bookscell 不是屏幕,因此React Navigation不会提供任何道具。

如果您想使用prop navigation in bookscell中的prop 然后您必须提供它。 您可以将其从具有Prop的父母传递给。 >通过 usenavigation() hook >导航 通过使用当前导航器的上下文。

591478673
Linda Paiste
2021-03-02