1.0.0 • Published 8 years ago

react-native-redux-router-simple v1.0.0

Weekly downloads
3
License
ISC
Repository
github
Last release
8 years ago

react-native-redux-router-simple

react native的路由组件,结合redux实现。它提供路由配置、路由跳转、顶部导航栏、底栏功能。 支持onEnter配置,可以在路由跳转前做登录授权验证决定是否重定向(replace)到登录页。

#关于该组件 组件是react-native-router-redux的简化版(去掉Schema配置,仅支持单个TabRoute配置),并在它的基础上增加了以下功能: 1.Router标签下除了定义Route及TabRoute标签外,还可以添加其它全局标签(View,Text,自定义组件如全局Loading组件等) 2.每个路由页可配置navbar或tabbar是否显示 3.Router组件提供onEnter配置,可用于做跳转前置控制(登录拦截)

#安装

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

#使用文档 请参考react-native-router-redux文档及example示例获取基础用法(路由跳转方法与它保持一致),其它如onEnter使用请参考下方示例。

#示例

'use strict';

import React, { Component } from 'react';

import { Navigator, StyleSheet, Image, View, Text, TouchableOpacity } from 'react-native';

import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

import Loading from '../components/loading';

import Hello from '../containers/hello';
import OrderDetail from '../containers/order-detail';
import Orders from '../containers/orders';
import Setting from '../containers/setting';

import { Router, Route, TabRoute, actions as routerActions } from '../components/router';

const mapStateToProps = state => ({
    router: state.router, // 一定要暴露出来(先在reducer中引入,请参考react-native-router-redux的示例中的reducer声明引用)
    global: state.global
});

const mapDispatchToProps = (dispatch) => ({
    // actions一定要暴露出来
    actions: bindActionCreators({
        ...routerActions,
    }, dispatch),
    dispatch
});

const assets = {
    'setting_active': require('../assets/img/setting_active.png'),
    'setting': require('../assets/img/setting.png'),
    'order_active': require('../assets/img/order_active.png'),
    'order': require('../assets/img/order.png')
};

class App extends Component {
    // 参数说明:
    // route --  当前即将进入的页面路由对象
    // routes -- 所有路由对象组成的列表
    // 返回说明: 返回路由对象, 组件根据返回路由replace到对应的
    // 页面(并会在跳转后的页面中注入属性: targetRoute=route, 用于登录成功后可回到route页)。
    handleRouteEnter (route, routes) {
        // 可作登录拦截
        // 此处仅判断路由是orderDetail页时,跳转至hello页
        if (route.name === 'orderDetail') {
            return routes['hello'];
        }

        return route;
    }

    // hideNavBar -- 是否不显示navbar
    // hideTabBar -- 是否不显示tabbar
    // Router的children中可添加多个全局组件显示,此处添加了Loading组件用来显示全局加载状态条。
    render() {
        const { fetchCount } = this.props.global;

        return (
            <Router {...this.props} assets={assets} initial="orders" onEnter={this.handleRouteEnter.bind(this)}>
                <Route name="hello" component={Hello} type="reset" hideNavBar={false} hideTabBar={false} title={"nothing"} />
                <Route name="orderDetail" component={OrderDetail} hideNavBar={true} title={"订单详情"} />
                <TabRoute name="tabBar" barTint='#fcfff7' tint="red">
                    <Route name="orders" component={Orders} title="订单" tabItem={{selectedColor: '#9ab270', color: '#babfb0', selectedIcon: assets['order_active'], icon: assets['order'], title: '订单'}} />
                    <Route name="setting" component={Setting} title="设置" tabItem={{selectedColor: '#9ab270', color: '#babfb0', selectedIcon: assets['setting_active'], icon: assets['setting'], title: '设置'}} />
                </TabRoute>
                <Loading isVisible={fetchCount ? true: false} />
            </Router>
        );
    }
}

let ConnectApp = connect(mapStateToProps, mapDispatchToProps)(App);

export default ConnectApp;