React-Native笔记--react-native-router-flux

2023-11-15

         项目中已经开始使用react-native-router-flux,这个库比较大,内容也比较丰富,它是react-navigation的增强版,添加了如modal,refresh等功能,使用的过程中一点点总结下来,方便以后再用,

使用前: npm i react-native-router-flux --save 或

yarn add react-native-router-flux

注意:react-native link

 小栗子:

Main.js

import React, {Component} from 'react'
import {Router, Stack, Scene} from 'react-native-router-flux'

import App from './App.js';
import MovieList from './components/movie/MovieList.js'
import MovieDetail from './components/movie/MovieDetail.js'

export default class Main extends Component {
	constructor(props) {
		super(props);
		this.state = {};
	}
	
	render() {
		return <Router sceneStyle={{backgroundColor: "#fff"}}>
    <Stack key="root">
      <Scene key="app" component={App} title="" hideNavBar={true}/>
      <Scene key="movielist" component={MovieList} title="热映电影列表"/>
      <Scene key="moviedetail" component={MovieDetail} title="电影详情"/>
    </Stack>
  </Router>
	}
}

MovieList.js

 

import React, {Component} from 'react';
import {
	View,
	Text,
	Image,
	ActivityIndicator,
	FlatList,
	StyleSheet,
	TouchableHighlight
} from 'react-native';

import {Actions} from "react-native-router-flux";

export default class MovieList extends Component {
	constructor(props) {
		super(props);
		this.state = {
			movies: [],
			currentPage: 1,
			pageSize: 12,
			isLoading: true,
			totalPage: 0
		};
	}
	
	componentWillMount() {
		this.getDataByPage();
	}
	
	render() {
		return <View>
			{this.renderList()}
		</View>
	}
	
	/*自定义的方法*/
	getDataByPage = () => {
		let start = (this.state.currentPage - 1) * this.state.pageSize;
		fetch(`https://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=${start}&count=${this.state.pageSize}`).then(res => res.json()).then(data => {
			this.setState({
				isLoading: false,
				movies: this.state.movies.concat(data.subjects),
				totalPage: Math.ceil(data.total / this.state.pageSize)
			})
		})
	};
	
	getDataByPage1 = () => {
		let data = require('./test_list.json');
		setTimeout(() => {
			this.setState({
				isLoading: false,
				movies: data.subjects,
				total: data.total
			})
		}, 300)
	};
	
	getSeparator = () => {
		return <View style={{
			borderTopWidth: 1,
			borderTopColor: '#666',
			marginLeft: 20,
			marginRight: 20,
		}}></View>
	};
	
	getNextPage = () => {
		if ((this.state.currentPage + 1) > this.state.totalPage) return;
		this.setState({
			currentPage: this.state.currentPage + 1
		}, () => this.getDataByPage())
	};
	
	renderList = () => {
		if (this.state.isLoading) {
			return <ActivityIndicator size="large"></ActivityIndicator>
		} else {
			return <FlatList
					data={this.state.movies}
					keyExtractor={(item, i) => i}
					renderItem={({item}) => this.renderItem(item)}
					ItemSeparatorComponent={this.getSeparator}
					onEndReachedThreshold={0.5}
					onEndReached={this.getNextPage}
			/>
		}
	};
	
	toMovieDetail = (id) => {
		Actions.moviedetail({id});
	};
	
	renderItem = (item) => {
		return <TouchableHighlight underlayColor="white" onPress={ () => this.toMovieDetail(item.id)}>
			<View key={item.id} style={styles.container}>
				<Image source={{uri: item.images.small}} style={styles.image}></Image>
				<View style={styles.infos}>
					<Text>电影名称:{item.title}</Text>
					<Text>电影类型:{item.genres.join(' ')}</Text>
					<Text>制作年份:{item.year}年</Text>
					<Text>豆瓣评分:{item.rating.average}</Text>
				</View>
			</View>
		</TouchableHighlight>
	}
}

const styles = StyleSheet.create({
	container: {
		flexDirection: 'row',
		padding: 20,
	},
	image: {
		width: 100,
		height: 140
	},
	infos: {
		justifyContent: 'space-around',
		paddingLeft: 30
	}
});

 

MovieDetail.js

import React, {Component} from 'react';
import {
	View,
	Text,
	Image,
	ScrollView,
	ActivityIndicator
} from 'react-native';

export default class MovieList extends Component {
	constructor(props) {
		super(props);
		this.state = {
			movie: [],
			isLoading: true
		};
	}
	
	componentWillMount() {
		this.getDataById(this.props.id);
	}
	
	render() {
		return <View>
			{this.renderDetail()}
		</View>
	}
	
	/*自定义的方法*/
	renderDetail = () => {
		if (this.state.isLoading) {
			return <ActivityIndicator size="large"></ActivityIndicator>
		} else {
			return <ScrollView>
				<View>
					<Text style={{fontSize: 25, textAlign: 'center', padding: 20}}>{this.state.movie.title}</Text>
					<View style={{alignItems: 'center'}}>
						<Image source={{uri: this.state.movie.images.large}} style={{width: 200, height: 280}}></Image>
					</View>
					<Text style={{fontSize: 16, lineHeight: 50, padding: 10}}>{this.state.movie.summary}</Text>
				</View>
			</ScrollView>
		}
	};
	getDataById = (id) => {
		fetch(`https://api.douban.com/v2/movie/subject/${id}?apikey=0df993c66c0c636e29ecbb5344252a4a`).then(res => res.json()).then(data => {
			this.setState({
				movie: data,
				isLoading: false
			});
		})
	};
	getDataById1 = () => {
		const data = require('./test_detail.json');
		setTimeout(() => {
			this.setState({
				movie: data,
				isLoading: false
			});
		}, 300)
	};
}

比较重要的API:

Actions:

主要提供导航功能;

[key]        Function    Object    Actions将'自动'使用路由器中的场景key进行导航。如果需要跳转页面,可以直接使用Actions.key()或Actions[key].call()。
currentScene    String         返回当前活动的场景。
jump          Function    (sceneKey: String, props: Object)    用于切换到新选项卡。如Actions.jump('string');
pop           Function         回到上一个页面。
popTo         Function    (sceneKey: String, props: Object)    返回到指定的页面。
push          Function    (sceneKey: String, props: Object)    跳转到新页面。
refresh       Function    (props: Object)    从堆栈中弹出当前场景,并将新场景推送到导航堆栈。没有过度动画。
replace       Function    (sceneKey: String, props: Object)    替换当前场景,没有动画。
reset         Function          (sceneKey: String, props: Object)    清除路由堆栈并将场景推入第一个索引. 没有过渡动画。
drawerOpen     Function         如果可用,打开Drawer。
drawerClose    Function         如果可用,关闭Drawer。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-Native笔记--react-native-router-flux 的相关文章

  • vue+flask实现视频目标检测yolov5

    开始做这个之前 了解一些vue的基础 然后对flask完全不知道 所以特别感谢很多博主的文章 主要参考的是这篇文章 在WEB端部署YOLOv5目标检测 Flask VUE 博主在GitHub上详细的代码给我一个很好的参考 他采用的是前后端分
  • 什么是原型、原型链?原型和原型链的作用(有图方便理解)

    原型 JS声明构造函数 用来实例化对象的函数 时 会在内存中创建一个对应的对象 这个对象就是原函数的原型 构造函数默认有一个prototype属性 prototype的值指向函数的原型 同时原型中也有一个constructor属性 cons
  • 移动端前端适配方案(总结) -- 面试重点

    在网上搜了一下 很多面试都会被问到移动端适配方法的问题 最近看了一些文章 这里总结一下 首先 谈一下目前为止出现的一些关于移动端适配的技术方案 1 通过媒体查询的方式即CSS3的meida queries 2 以天猫首页为代表的 flex
  • CSS样式——div居中方法

    1 绝对居中 给div设置样式 div默认显示位置为body的左上方 width 400px height 300px background color orange 如下图所示 首先给div添加绝对定位 并设置上下左右边距为0 然后使用m
  • videojs 销毁重新初始化问题及其他使用

    1 videojs 销毁 this myvideo videojs myvideo bigPlayButton false textTrackDisplay false posterImage true errorDisplay false
  • 前端知识整理

    1 闭包 JS 中的闭包是什么 1 什么是闭包 函数和函数内部可以访问的变量组合一起就叫做闭包 闭包
  • 33-js-concepts(二)原始类型

    原始类型 原始类型 2 1 2 2 2 3 2 4 2 5 2 6 原始类型 2 1 基本类型 基本数值 基本数据类型 是一种既非对象也无方法的数据 在 JavaScript 中 共有7种基本类型 string number bigint
  • 前端学习--知识整理

    前端学习 知识整理 一 深 浅拷贝 1 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的 2 赋值和浅拷贝的区别 3 浅拷贝的实现方式 1 Object assign 2 Array prototype concat 3
  • 前端之HTML

    目录 1 编写一个HTML代码 2 HTML常见语法 2 1注释标签 2 2标题标签 2 3段落标签 2 4换行标签 2 5格式化标签 2 6图片标签 2 6 1img标签的其他属性 2 7超链接标签 2 7 1空连接 2 8列表标签 2
  • javaweb-react的入门遇到的问题一:state和props的初始化和设置修改

    引用仿照菜鸟教程的例子 需要网页有一个id为example333的div var HelloMessage React createClass getDefaultProps return password 123456 render fu
  • canvas绘制小树阴影-transform

    绘制小路 可用quadraticCurveTo 二次贝塞尔曲线 来绘制复杂曲线 也可以用bezierCurveTo 三次贝塞尔曲线 效果图 代码如下 demo html
  • vue:结合elementUI设计网站登录页

    这次主要是记录三个重点 1 组件间通信的方法 其一 2 脚手架搭建的vue工程的组件调用 3 elementUI 的轮播图与模态框的设计 先看效果图 简单的就做了这四个页面 总共四个组件实现这些效果 这个小网站需要的组件也挺多的 当然不止这
  • ElementUI的表单效验问题 (一个页面两个form(数据相似))

    两个form 注意 两个表单必须绑定不同的 key key为字符串 否则 vue看两个表单数据大致相同就会将其上面的复用 导致效验不生效 rules
  • vue简单实现div滚动触底加载更多数据效果

    vue简单实现div滚动触底加载更多数据效果 1 html div class webTherapyAuditList div里放置一些需要滚动加载的信息 滚动函数通过 scroll触发 div 2 js 获取页面滚动距离 handleSc
  • Echarts 提示内容自定义 y轴显示中文

    提示信息 只需要重写tooltip中的formatter方法 然后按照函数进行数据处理 并返回要显示的数据即可 tooltip formatter function params var res params 0 name br 水质等级为
  • transform: translateY(-100%)偏移实现上滑隐藏导航栏

    transform translateY 100 语法 Transform字面上就是变形 改变的意思 在CSS3中transform主要包括以下几种 旋转rotate 扭曲skew 缩放scale和移动translate以及矩阵变形matr
  • 前端学习--常用PS方法

    本文使用的软件为ps CC 2019 1 切图 1 打开一张psd文件 2 取消背景色 3 选择切片工具 4 按住 CTRL 键进行切图 切完后自行调整切图宽高 当切好第一张图后同时按住 CTRL 和 ALT 可按照的第一张切图的宽高进行第
  • Vuex的五个核心属性

    Vuex的五个核心概念 本文参考自Vue文档 说的非常详细 建议看文档 Vuex是什么 VueX 是一个专门为 Vue js 应用设计的状态管理架构 统一管理和维护各个vue组件的可变化状态 你可以理解成 vue 组件里的某些 data V
  • Vue中修改浏览器图标Logo

    1 找到index html文件 2 修改这段代码中的图片 3 图标没有变化的话清除一下游览器缓存
  • HTML5学习(三):布局标签、列表、超链接和id

    1 布局标签 header表示网页的头部 页眉 main表示网页的主体部分 一个页面中只会有一个main footer表示网页的底部 页脚 nav表示网页中的导航 aside和主体相关的其他内容 侧边栏 article表示一个独立的文章 s

随机推荐

  • [FreeRTOS入门学习笔记]定时器

    定时器的使用步骤 1 定义一个handle xTimerCreate创建 2 启动定时器 在Task1中调用 通过队列通知守护任务来执行定时器任务 要再config头文件中定义守护任务相关配置 虽然定时器是在task1中启动 但是定时器的任
  • qt实现opengl播放yuv视频

    qt使用opengl播放yuv视频 文章目录 qt使用opengl播放yuv视频 toc 1 实现效果 2 pro文件 3 xvideowidget h 4 xvideowidget cpp 更多精彩内容 个人内容分类汇总 1 实现效果 2
  • VS2022编译GDAL库报错: fatal error U1050: PROJ_INCLUDE should be defined. PROJ >= 6 is a required depende

    目录 场景复现 定位问题 解决方案 踩过的坑 场景复现 使用VS2022的Native Tools command prompt for 2022工具编译GDAL库时 报 fatal error U1050 PROJ INCLUDE sho
  • RTSP视频边缘计算网关EasyNVR在5G时代有什么运用价值?

    5G和互联网的发展在近几年一直被按下了加速键 物联网正在成为主流 毋庸置疑 云计算为越来越多智能设备的连接提供了基础 给我们生活带来了极大便利 而边缘计算是云计算物联当中的一个关键应用 当我们在考虑云计算带来的数据过度集中 信息传输堵塞问题
  • 2018年最好用的5个python网站开发框架

    python作为解释型脚本语言 是一种通用的编程语言 由于python社区拥有大量的库文件 框架和其他的一些实用工具 我们可以用python完成各种各样的任务 另外 由于python的代码构成和结构就像英语句子一样自然 这种语言的学习曲线也
  • Spring(三)-IOC使用

    目录 基于XML管理bean 入门案例 引入依赖 创建类HelloWorld 创建Spring的配置文件 在Spring的配置文件中配置bean 创建测试类测试 思路 获取bean 方式一 根据id获取 方式二 根据类型获取 方式三 根据i
  • 延迟渲染到最终结果------1,2,分配渲染目标和初始化窗口(大象无形11.3.1)

    版本不同 我这里延迟渲染是FDeferredShadingSceneRenderer类 即函数 void FDeferredShadingSceneRenderer Render FRHICommandListImmediate RHICm
  • 经过两年努力,我终于进入腾讯(PCG事业群4面总结)

    前言 为什么要尽量让自己进大厂 如果毕业就进了大厂 那你将得到业内大牛的指导 以及随处可见的技术碰撞 新技术的跟进也是非常快的 在这样的环境中 你的技术成长自然是非常快的 如果自己足够努力 用不了三年 你可能也将会跟他们水平差不多 所以 明
  • c语言编译过程

    C语言的编译过程一般分为四个步骤 预处理 编译 汇编和链接 预处理 Preprocessing 预处理器会处理源代码中以 开头的预处理指令 例如 include和 define等 将它们替换为相应的内容 同时 还会删除注释和空格 将多行代码
  • qt-事件循环系统

    Qt中 如果创建的console程序 使用的是QCoreApplication对象 如果创建的是GUI程序 使用的是QApplication对象 而QApplication 继承自 QGUIApplication 最终继承QCoreAppl
  • golang的cms

    golang的cms 2019 03 06 12 53 by 轩脉刃 阅读 评论 收藏 编辑 golang的cms 说说cms cms 内容管理系统 是建站利器 它的本质是为了快速建站 cms本质是一个后台服务站 使用这个后台 能很快搭建一
  • 做区块链卡牌游戏有什么好处?

    区块链卡牌游戏是一种基于区块链技术的创新性游戏形式 它将传统的卡牌游戏与区块链技术相结合 实现了去中心化 数字化资产的交易和收集 这种新型游戏形式正逐渐在游戏行业引起了广泛的关注和热潮 本文将深入探讨区块链卡牌游戏的定义 特点以及其在未来的
  • 自己撸一个阅读类休闲app

    其实自己早就想撸一个app 因为自己一直没什么机会可以做那种好看的app 对我而言好看就是能安装在手机上 然后看着舒服的 所以也对自己所学进行一次整合 然后再次扬帆 感谢那些贡献开源api的大神 也感谢gank 主要使用的开眼的api ga
  • KafkaTemplate是如何发送消息的?

    Kafka使用KafkaTemplate发送消息 需要先实例化bean 配置如下
  • 如何在Eclipse中查看JDK以及Java框架的源码

    对于Java程序员来说 有时候是需要查看JDK或者一些Java框架的源码来分析问题的 而默认情况下 你按住Ctrl 再点击 Java本身的类库 例如ArrayList 是无法查看源码的 那么如何在Eclipse中查看JDK以及Java框架的
  • 如何计算 Node.js GC 负载

    在 Node js 中 我们关注的比较的是 CPU 负载 但是在有 GC 的语言中 GC 负载也是需要关注的一个指标 因为 GC 过高会影响我们应用的性能 本文介绍关于 GC 负载的一些内容 如何获取 GC 耗时 操作系统本身会计算每隔线程
  • 【caffe跑试验遇到错误:Check failed: error == cudaSuccess (2 vs. 0) out of memory】

    刚开始跑caffe试验 老是遇见各种错误 今天又遇见 span style font size 18px color ff0000 I1214 09 32 19 428040 11425 net cpp 748 Ignoring sourc
  • SAS的基本使用介绍1(数据集建立与输入输出格式)

    SAS的基本使用 提前说明 本软件安装较为复杂 而且所占空间很大 运行helloworld Data a File print Put hello world
  • 华为OD机试 - 求满足条件的最长子串的长度(Java)

    题目描述 给定一个字符串 只包含字母和数字 按要求找出字符串中的最长 连续 子串的长度 字符串本身是其最长的子串 子串要求 1 只包含1个字母 a z A Z 其余必须是数字 2 字母可以在子串中的任意位置 如果找不到满足要求的子串 如全是
  • React-Native笔记--react-native-router-flux

    项目中已经开始使用react native router flux 这个库比较大 内容也比较丰富 它是react navigation的增强版 添加了如modal refresh等功能 使用的过程中一点点总结下来 方便以后再用 使用前 np