Creat-React-Native-App 之StackNavigator之踩坑记录
Creat-React-Native-App简称CRNA.
在我开始入门RN时fb已经推出和Expo联合开发用于快速创建React Native应用的工具: Create-React-Native-App。以下是在CRNA开发起步时导航器跳转页面遇到的问题记录。
参考资料:React Native中文网
根据教程指导,写了最简单的导航条调用示例:
import React from 'react';
import { StyleSheet,
Text,
Button,
View,
} from 'react-native';
import {StackNavigator } from 'react-navigation'; export default class HomeScreen extends React.Component {
static navigationOptions = {
title: 'Welcome',
};
render() {
return (
<Text>Hello, Navigation!</Text>;
);
}
}
正确运行效果应对如上图,然而我的运行效果并没有title,只有 Text,这里记为问题一。
继续按照教程往下走,新增一个页面用于跳转。
import React from 'react';
import { StyleSheet,
Text,
Button,
View,
} from 'react-native';
import {StackNavigator } from 'react-navigation'; class HomeScreen extends React.Component {
static navigationOptions = {
title: 'Welcome',
};
render() {
const { navigate } = this.props.navigation;
console.log(navigate);
return (
<View>
<Text>Hello, Chat App!</Text>
<Button
onPress={() => navigate('Chat', { user: 'Lucy' })}
title="Chat with Lucy"
/>
</View>
);
}
} class ChatScreen extends React.Component {
static navigationOptions = ({ navigation }) => ({
title: `Chat with Lucy`,
});
render() {return (
<View>
<Text>Chat with Lucy</Text>
</View>
);
}
}
export default
const AwesomeProject = StackNavigator({ Home: { screen: HomeScreen }, Chat: { screen: ChatScreen } }
在这套代码下我先后遇到了多个错误:
Route 'Chat' should declare a screen. For example: ...etc
undefined is not an object (evaluating 'this.props.navigation.navigate')
......
仔细查看教程发现代码并没有不同,多番尝试后终于找到解决方法!! 原贴参考:React Native - navigation issue “undefined is not an object (this.props.navigation.navigate)”
按照帖子补充完代码后终于正常运行并一同解决了问题一,祭出代码:
import React from 'react';
import { StyleSheet,
Text,
Button,
View,
} from 'react-native';
import {StackNavigator } from 'react-navigation'; class HomeScreen extends React.Component {
static navigationOptions = {
title: 'Welcome',
};
render() {
const { navigate } = this.props.navigation;
console.log(navigate);
return (
<View>
<Text>Hello, Chat App!</Text>
<Button
onPress={() => navigate('Chat', { user: 'Lucy' })}
title="Chat with Lucy"
/>
</View>
);
}
} class ChatScreen extends React.Component {
static navigationOptions = ({ navigation }) => ({
title: `Chat with Lucy`,
});
render() {
return (
<View>
<Text>Chat with Lucy</Text>
</View>
);
}
} // AwesomeProject 是你的react native 项目名 注意:这块代码要放置到HomeScreen,ChatScreen...的下面否则会出错:Home不存在。
const AwesomeProject = StackNavigator({
Home: { screen: HomeScreen },
Chat: { screen: ChatScreen }
}
,{
initialRouteName: 'Home', // 默认显示界面
// header:{
// //导航栏可见
// visible : false,
// //左上角的返回键文字, 默认是上一个页面的title
// backTitle : "返回",
// //导航栏的style
// headerStyle: {
// backgroundColor: '#fff'
// },
// //导航栏的title的style
// titleStyle: {
// color: 'green'
// }
// },
// title : 'home',
// //导航栏的style
// headerStyle: {
// backgroundColor: '#fff'
// },
// //导航栏的title的style
// headerTitleStyle: {
// color: 'blue',
// //居中显示
// alignSelf : 'center',
// }, // //是否允许右滑返回,在iOS上默认为true,在Android上默认为false
// cardStack: {
// gesturesEnabled: true,
// },
// onTransitionStart: ()=>{ console.log('导航栏切换开始'); }, // 回调
// onTransitionEnd: ()=>{ console.log('导航栏切换结束'); }, // 回调
}); const AppNavigation = () => (
<AwesomeProject />
) export default class App extends React.Component {
render(){
return (
<AppNavigation/>
)
}
}
至于原理还没有研究,稍后如果弄明原理,再回来来补充。
Creat-React-Native-App 之StackNavigator之踩坑记录的更多相关文章
- React Native工作小技巧及填坑记录
以下是本人在React Native开发工作中使用的一些小技巧,记录一下. 1.从网络上拉取下来的React Native缺少React和React Native库. 终端 1. cd 项目根目录 2 ...
- React Native APP结构探索
APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...
- React Native App设置&Android版发布
React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...
- React Native & app demos
React Native & app demos https://github.com/ReactNativeNews/React-Native-Apps https://github.com ...
- 利用 Create React Native App 快速创建 React Native 应用
本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...
- [译] Facebook:我们是如何构建第一个跨平台的 React Native APP
英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...
- React Native 导入原生Xcode项目总结与记录
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- IDFA踩坑记录
IDFA踩坑记录: 1.iOS10.0 以下,即使打开“限制广告跟踪”,依然可以读取idfa: 2.打开“限制广告跟踪”,然后再关闭“限制广告跟踪”,idfa会改变: 3.越狱机器安装开发证书打的包, ...
随机推荐
- 【转】UBOOT——启动内核
转自:https://www.cnblogs.com/biaohc/p/6403863.html 1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU ...
- NNIE(待尝试)
马克 https://blog.csdn.net/ywcpig/article/details/85260752 https://blog.csdn.net/u011728480/article/de ...
- CF 937
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- DDD领域驱动设计初探(二):仓储Repository(上)
前言:上篇介绍了DDD设计Demo里面的聚合划分以及实体和聚合根的设计,这章继续来说说DDD里面最具争议的话题之一的仓储Repository,为什么Repository会有这么大的争议,博主认为主要原 ...
- 组件通信 Provide&&inject
在父组件中利用Provide 注入数据,在所有的子组件都可以拿到这个数据 可以在vue 中用来刷新页面 <!DOCTYPE html> <html lang="en&quo ...
- 在浏览器下载pdf,或者txt文档是会直接打开
window.location.href = url会直接打开,解释大概是因为浏览器自身可以解析.pdf或者txt.解决方法如下: 本来就要用a标签里面加上download属性的,结果发现不行,就算了 ...
- IDEA unable to find valid certification path to requested target
一.报错 Could not transfer artifact org.apache.maven.plugins:maven-install-plugin:pom:2.4 from/to alima ...
- react native 之 在现有的iOS工程中集成react native
在现有的iOS工程中集成react native, 或者说将react native引入到iOS 项目,是RN和iOS混合开发的必经之路 参考官网教程:https://reactnative.cn/d ...
- jsp格工化日期
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> .当后台传过来的时 ...
- Thread的几种方法的使用
1:setPriority() 设置线程的优先级,从1 到10. 5是默认的. 1是最低优先级. 10是最高优先级 public class MyThread01 implements Runn ...