gpt4 book ai didi

javascript - undefined 不是对象(评估 this.props.navigation.navigate)

转载 作者:行者123 更新时间:2023-11-30 15:02:32 24 4
gpt4 key购买 nike

我是第一次尝试学习 React Native。我试图引入一个 stacknavigator,但是行 const {navigate} = this.props.navigation; 导致了错误:

undefined is not an object (evaluating 'this.props.navigation.navigate')

这是我的代码:

import React, { Component } from "react";
import { StackNavigator } from "react-navigation";
import { AppRegistry, Text, View } from "react-native";

export default class App extends Component {
static navigationOptions = {
title: "Login",
headerStyle: {
backgroundColor: "#000000"
},
headerTitleStyle: {
color: "#fff"
}
};

constructor(props) {
super(props);
}
render() {
console.log(this.props);

const { navigate } = this.props.navigation;
return (
<View>
<Text>Hello</Text>
</View>
);
}
}

const myscreens = StackNavigator({
Home: { screen: App }
});
AppRegistry.registerComponent("app", () => myscreens);

我做错了什么,我该如何解决?

我还应该提到,渲染函数和构造函数中的 props 是空的。

这是我的 package.json 以防万一

{
"name": "myapp",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.0.0-alpha.12",
"react-native": "0.48.3",
"react-navigation": "git+https://github.com/react-community/react-navigation.git"
},
"devDependencies": {
"babel-jest": "21.0.2",
"babel-preset-react-native": "4.0.0",
"jest": "21.1.0",
"react-test-renderer": "16.0.0-alpha.12"
},
"jest": {
"preset": "react-native"
}
}

这是我的 index.android.js

import React, { Component } from 'react';
import App from './components/app';
import {
AppRegistry,
View
} from 'react-native';

export default class myapp extends Component {
render() {
return (
<App />
);
}
}


AppRegistry.registerComponent('myapp', () => myapp);

最佳答案

两个错误:

  1. 您不应该像那样调用 AppRegistry 两次。您可以将其从您的 app.js 文件中删除。

  2. 您误解了 react-navigation 的路由器是如何工作的。 StackNavigator(以及 Tab 和 Drawer)是需要直接渲染的组件(例如,您传递给 AppRegistry [A] 的组件)或在您的应用程序中的某个时刻 [ B].

因此,要解决此问题,您需要导出 myscreens 而不是 App。为了说明执行此操作的两种方法:

A. 你可以看到这个 in the docs 的例子, 但由于您将代码分成两个文件,因此它看起来像这样:

./components/app.js

import React, { Component } from 'react';
import { StackNavigator } from 'react-navigation';
import { Text, View } from 'react-native';

class App extends Component {
static navigationOptions = {
title: 'Login',
headerStyle: {
backgroundColor: '#000000',
},
headerTitleStyle: {
color: '#fff',
},
};

constructor(props) {
super(props);
}
render() {
console.log(this.props);

const { navigate } = this.props.navigation;
return (
<View>
<Text>Hello</Text>
</View>
);
}
}

const myscreens = StackNavigator({
Home: { screen: App },
});

export default myscreens;

index.android.js

import { AppRegistry } from 'react-native';
import myscreens from './components/app';

AppRegistry.registerComponent('myapp', () => myscreens);

B. 您将在另一个类中呈现 StackNavigator,然后导出呈现它的类。这更符合你已经在做的事情,并且从长远来看更灵活(例如:如果你在某些时候使用 redux ,你将需要这样做),所以你应该这样做这样:

./components/app.js - 注意 myscreens 的大小写更改为 MyScreens。这是必需的,因为 React Native 将 complain about this作为lowercase JSX tags are considered to be HTML .直接使用 AppRegistry 不会触发此错误,因为您没有在 JSX 中使用 myscreens

import React, { Component } from 'react';
import { StackNavigator } from 'react-navigation';
import { Text, View } from 'react-native';

class App extends Component {
static navigationOptions = {
title: 'Login',
headerStyle: {
backgroundColor: '#000000',
},
headerTitleStyle: {
color: '#fff',
},
};

constructor(props) {
super(props);
}
render() {
console.log(this.props);

const { navigate } = this.props.navigation;
return (
<View>
<Text>Hello</Text>
</View>
);
}
}

const MyScreens = StackNavigator({
Home: { screen: App },
});

export default MyScreens;

index.android.js

import React, { Component } from 'react';
import { AppRegistry } from 'react-native';
import MyScreens from './components/app';

export default class myapp extends Component {
render() {
return <MyScreens />;
}
}

AppRegistry.registerComponent('myapp', () => myapp);

关于javascript - undefined 不是对象(评估 this.props.navigation.navigate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com