使用 react-native-simple-router 组织你的React Native 页面

React Native Simple Router是一款第三方导航组件。你可以通过它进行合理的视图组织。

项目地址

安装

进入你的项目目录,如过没有初始化项目可以react-native init your_project,然后在项目目录安装react-native-simple-router

npm install react-native-simple-router --save

使用

import Router from 'react-native-simple-router';

修改的你的index.ios.js,如果是Android修改对应文件即可。

import React,{ StyleSheet } from 'react-native';

// 初始化页面
class HelloPage extends React.Component {

  render() {
    return <Text>Hello world!</Text>;
  }

}

const styles = StyleSheet.create({
  header: {
    backgroundColor: '#5cafec',},});

// 在这里定义你的路由
// - 其中name 将会成会顶部导航条的标题内容
// - `component`用于渲染页面的组件
const firstRoute = {
  name: 'Welcome!',component: HelloPage,};

class MyApp extends React.Component {

  render() {
    return (
      <Router
        firstRoute={firstRoute}
        headerStyle={styles.header}
      />
    );
  }
}

AppRegistry.registerComponent('routerTest',() => MyApp);

接下来你可以加入更多页面,你可以通过this.props.toRoute()导航至另外一个组件

我们定义另外一个页面next.js,代码很简单:

'use strict';

var React = require('react-native');

var {
    StyleSheet,View,Text,Image,TextInput,Component
} = React;

var styles = StyleSheet.create({
  container: {
    flex: 1,justifyContent: 'center',alignItems: 'center',backgroundColor: '#F5FCFF',welcome: {
    fontSize: 20,textAlign: 'center',margin: 10,instructions: {
    textAlign: 'center',color: '#333333',marginBottom: 5,});

class Next extends Component {
    constructor(props){
        super(props);
    }
    
    render() {
        var me = this;
        return (
          <View style={styles.container}>
            <Text style={styles.welcome}>
              Welcome to Next Page!
            </Text>
          </View>
        );
  }
}


module.exports = Next;

index.ios.js中主要加入下面方法

import React,{ StyleSheet,PropTypes } from 'react-native';
var Next = require('./next');
const propTypes = {
  toRoute: PropTypes.func.isRequired,};

class HelloPage extends React.Component {

  constructor(props) {
      super(props);

      this.nextPage = this.nextPage.bind(this);
  }

  nextPage() {
    this.props.toRoute({
      name: "next screen",component: Next
    });
  }

  render() {
    return (
      <View>
        <TouchableHighlight onPress={this.nextPage} underlayColor="transparent">
          <Text>Next page please!</Text>
        </TouchableHighlight>
      </View>
    );
  }
}

HelloPage.propTypes = propTypes;

这个时候我们点击 next page 即可导航至next页面。请记住this.props.toRoute()必须在顶级路由中使用,如果你的链接潜入在多个组件中,你必须确保它能够冒泡到它的父级。

配置

<Router /> 可以配置下面的属性:

  • firstRoute(必须): 你导航的首页

  • headerStyle: 改变你导航条的背景样式

  • titleStyle:改变导航条里的文字样式

  • bgStyle: 改变所有路由的背景样式

  • borderBottomWidth: 底部导航条的宽度

  • backButtonComponent:默认导航条会呈现一个back 文本的返回按钮,当然你可以自定义设置的组件

  • customAction:

  • hideNavigationBar: 隐藏导航条

  • statusBarProps:默认获取状态栏的props,可以参考StatusBar Docs.
    +

this.props.toRoute()需要传入一个对象作为参数设置 。

  • name:路由的名称,也会被用在导航条的文本显示

  • component(必须):需要渲染的组件

  • leftCorner: 从导航左边开始开始渲染

  • rightCorner:则是从右边渲染相关组件

  • titleComponent:指定一个组件用于替换标题,类似Ins的第一页

  • headerStyle: 指定新渲染组件的导航条样式,你可以指定一个背景色,然后路由转换是会平滑过渡

  • passProps:带入一组参数,通常是一个对象key-value给新的组件

  • titleProps:如果你设置了title为一个组件,这样你可以把titleProps的值传入进去。

  • sceneConfig:控制转场动画,常见的参数如下:

Navigator.SceneConfigs.FadeAndroid
Navigator.SceneConfigs.FloatFromBottom
Navigator.SceneConfigs.FloatFromBottomAndroid
Navigator.SceneConfigs.FloatFromLeft
Navigator.SceneConfigs.FloatFromRight
Navigator.SceneConfigs.HorizontalSwipeJump
Navigator.SceneConfigs.PushFromRight
Navigator.SceneConfigs.VerticalDownSwipeJump
Navigator.SceneConfigs.VerticalUpSwipeJump

更多属性参考可以参阅这里

this.props.replaceRoute的参数设置和toRoute一致,但是二者的区别在于toRoute会加入到你的堆栈中,而replaceRoute它将会替换当前所在的路由。

如果你是在登录或者登出的功能,使用replaceRoute会好过直接再导航至该路由。

this.props.resetToRoutetoRoute()传入的参数一致,而它的差异在于,它会替换掉当前的路由并且清空导航。如果你登录成功或者注册成功后,你并不希望退后,使用resetToRoute则会非常有用。

案例

Twitter App

一个简单的模仿twitter 的 应用,你可以直接使用它,并借鉴它的写法。

import React,{ AppRegistry } from 'react-native';
import TwitterApp from './node_modules/react-native-simple-router/examples/twitter-example';

AppRegistry.registerComponent('routerTest',() => TwitterApp);

Explorer app

node_modules/react-native-simple-router/examples/Explorer里面还有一个Demo,安装依赖后便可以运行.

我们可以大致参考作者的目录架构

+ images/
+ style
    + css
    + icons
+ components
+ service
+ pages
+ ios
+ android
- index.ios.js 
- index.android.js
...

反馈

react-native-simple-router实际来源于react-native-router,但是作者不再更新,因此我们迁移过来,不过你依旧可以在原来issues找到你有可能遇到的问题的答案。

其他组件推荐

本文同步自己的博客:http://www.jackpu.com/shi-yong-react-native-simple-router-zu-zhi-ni-de-react-native-ye-mian/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom