开发者问题收集

未捕获的类型错误:无法读取未定义的属性(读取“navigate”)

2022-01-28
10324

我是 React Native 和 React Navigation 的新手,我收到此错误。

Uncaught TypeError: Cannot read properties of undefined (reading 'navigate')

我不明白,因为我只是使用已经有效的相同代码,但现在它不起作用了。

我正在尝试制作一个后退箭头,将您送回 MachineList 屏幕。

//doesn't work
const AddMachineDetails = ({route}, props) => {

...

<TouchableOpacity onPress={() => props.navigation.navigate("MachinesList")}>
        <BackArrow />
 </TouchableOpacity>

因此,当我按下后退箭头时,它会向我发送此错误:

Uncaught TypeError: Cannot read properties of undefined (reading 'navigate')

这是我的导航文件:

import MachinesList from '../components/MachinesList'
import AddMachineDetails from '../components/AddMachineDetails';

...

function MachineListStackScreen() {
    return(
        <Stack.Navigator screenOptions={{headerShown: false}}>
            <Stack.Screen name='MachinesList' component={MachinesList}/>
            <Stack.Screen name='AddMachineDetails' component={AddMachineDetails}/>
        </Stack.Navigator>
    )
}

...

我认为问题出在这段代码的某个地方,但如果不是,我会向您展示更多我的代码

这是一个我的 navigation.navigate 完美运行的示例:

//no specific imports  (but works)

const MachinesList = (props) => {

...


<TouchableOpacity style={styles.machineBox} onPress={() => props.navigation.navigate('AddMachineDetails', {item})}>
2个回答

您必须 析构 props 参数。

const AddMachineDetails = ({route, ...props}) => { ... }

const AddMachineDetails = ({route, navigation, ...props}) => { ... }  // then straightly use the *navigation*
Ergis
2022-01-28

问题出在这里 ({route}, props) =>

您正在解构第一个参数,但没有传递其他参数,这就是“props”变量未定义的原因。

您有两个解决方案:

  1. 只需使用 props:
const AddMachineDetails = (props) => {
  1. 解构 props:
const AddMachineDetails = ({route, navigation, ...props}) => {
...

<TouchableOpacity onPress={() => navigation.navigate("MachinesListDetails")}>
       <BackArrow />
</TouchableOpacity>
Giovanni Londero
2022-01-28