RN中的常用框架基礎(chǔ)搭建

底部Tab結(jié)構(gòu)+側(cè)滑菜單結(jié)構(gòu),可自行選擇


1、root.js (src/root.js)

import React from 'react';
import {AppRegistry} from 'react-native';
import {Provider} from 'react-redux';
import configureStore from './store/store';
import {AppNavigator} from './routes/routers';

const store = configureStore();

export default class Root extends React.Component{
  render(){
    return(
        <Provider store={store}>
          <AppNavigator/>
        </Provider>
    )
  }
}
 /**此處appName 自行定義**/
AppRegistry.registerComponent(appName, () => Root);

2球化、store.js (src/store/store.js)

'use strict';

import { createStore, applyMiddleware } from 'redux';
import { createLogger } from 'redux-logger';
import thunkMiddleware from 'redux-thunk';
import rootReducer from '../reducers/index';
//此處的http文件可自行配置
import http from '../middlewares/http';
import {navMiddleware} from '../routes/routers';


const middelwares = [];

middelwares.push(http);
middelwares.push(thunkMiddleware);
middelwares.push(navMiddleware);

if (process.env.NODE_ENV === 'development') {
  middelwares.push(createLogger());
}

const createStoreWithMiddleware = applyMiddleware(...middelwares)(createStore);

export default function configureStore(initialState) {
  const store = createStoreWithMiddleware(rootReducer,  initialState);
  return store;
}

3、index.js (src/reducers/index.js)

import { combineReducers } from 'redux'
import app from './app';
const AppReducer = combineReducers({
  app,
  //...此處添加需要加入的
});
export default AppReducer

4瓦糟、app.js (src/reducers/app.js)

import Immutable from 'immutable';

const initState = Immutable.fromJS({

});

export default (state = initState, action) => {
let newState = state;
switch (action.type) {
    default:
        return newState;
}
};


此處創(chuàng)建的是帶抽屜Drawer嵌套底部TabBar的框架筒愚,可以自行修改框架的形式


5、routers.js (src/routes/routers.js)

import {connect} from 'react-redux';
import {
   createStackNavigator,
} from 'react-navigation';
import {
  reduxifyNavigator,
  createReactNavigationReduxMiddleware,
} from 'react-navigation-redux-helpers';
import SplashScreen from '../splashPage';
import DrawerScreen from './drawerPage';

const navMiddleware = createReactNavigationReduxMiddleware(
  'root',
  state => state.nav
);
const StackNavigatorConfigs = {
  initialRouteName: 'Splash', // 初始化哪個(gè)界面為根界面
  mode: 'card', // 跳轉(zhuǎn)方式:默認(rèn)的card菩浙,在iOS上是從右到左跳轉(zhuǎn)巢掺,在Android上是從下到上,都是使用原生系統(tǒng)的默認(rèn)跳轉(zhuǎn)方式劲蜻。
  headerMode:'screen', // 導(dǎo)航條動(dòng)畫效果:float表示會(huì)漸變陆淀,類似于iOS的原生效果,screen表示沒有漸變先嬉。none表示隱藏導(dǎo)航條
  navigationOptions: {
    gesturesEnabled: false, //是否可以使用手勢(shì)關(guān)閉此屏幕轧苫。在iOS上默認(rèn)為true,在Android上為false
  },
};

const StackRouteConfigs = {
  Splash: {
    screen: SplashScreen,
    navigationOptions: {
        header: null
    }
  },
/*此處的DrawerScreen可替換成任意的形式,例如tabBar形式*/
  Main: {
    screen: DrawerScreen,
    navigationOptions: {
        header: null
    }
  },
};

const RootNavigator = createStackNavigator(StackRouteConfigs,        StackNavigatorConfigs);

const AppWithNavigationState = reduxifyNavigator(RootNavigator, 'root');

const mapStateToProps = state => ({
  state: state.nav,
});

const AppNavigator = connect(mapStateToProps)(AppWithNavigationState);

export {RootNavigator, AppNavigator, navMiddleware};

6疫蔓、tabBar.js (src/routes/tabBar.js)

import React from 'react';
import {
   TouchableOpacity,
    Image,
    View,
    StyleSheet,
    Dimensions,
    Platform,
    Text,  
} from 'react-native';
import {
    createBottomTabNavigator,
} from "react-navigation";
import CenterIcon from '../../assets/imgs/tabBar/center.png';
import SelectCenterIcon from '../containers/center/selectcenter.png';
import HomeScreen from '../containers/home/home';
import CenterScreen from '../containers/center/center';

const {width,height} = Dimensions.get('window');

const styles = StyleSheet.create({
    pressedIcon: {
        fontFamily: 'iconfont',
        fontSize: 20,
        color: '#17A9DF',
        marginTop: 10,
    },
    renderIcon: {
        fontFamily: 'iconfont',
        fontSize: 20,
        color: '#B4B4B4',
        marginTop: 10,
    }
});

export default Tab = createBottomTabNavigator({
    Home: {
        screen: HomeScreen,
        navigationOptions: {
            tabBarPosition: 'bottom',
            tabBarLabel: 'Home',
            showLabel: false,
            tabBarIcon: ({tintColor, focused}) => (
                focused ? <Text style={styles.pressedIcon}>&#xe664;</Text> : <Text style={styles.renderIcon}>&#xe663;</Text>
            ),
        }
    },
    /**此處的Home和Center兩個(gè)Tab 是不同形式的含懊,一個(gè)文本形式,一個(gè)圖片形式 **/
    Center: {
        screen: CenterScreen,
        navigationOptions: {
            //此處tabBarVisible表示是否顯示當(dāng)前的tab選項(xiàng)
            tabBarVisible: false,
            tabBarPosition: 'bottom',
            tabBarLabel: 'Center',
            showLabel: false,
            tabBarIcon: ({tintColor, focused}) => (
                 focused ? <Image source={SelectCenterIcon} style={{marginBottom:25}}/> :<Image source={CenterIcon} style={{marginBottom:25}}/>
            ),
        }
    },
}, {
    animationEnabled: true,
    swipeEnabled: false,
    //是否可以滑動(dòng)切換
    swipeEnabled: false,
    //切換是否有動(dòng)畫
    animationEnabled: true,
    //進(jìn)入App的首頁面
    initialRouteName: 'Home',
    //對(duì)于導(dǎo)航的設(shè)置
    tabBarOptions: {
        activeTintColor: '#17A9DF',
        inactiveTintColor: '#B4B4B4',
        //android特有下劃線的顏色1
        indicatorStyle: {height: 0},
        //文字的樣式
        labelStyle: {
            fontSize: 10,
            paddingBottom: 10
        },
        //對(duì)于導(dǎo)航的stytles
        style :{
            borderTopColor: 'rgba(0,0,0,0.2)',
            borderTopWidth: 1,
            backgroundColor: '#ffffff',
        }
    }
});

7衅胀、drawer.js (src/routes/drawer.js)

import React from 'react';
import {
    StyleSheet,
    Dimensions,
    Platform,
    Text,
    TouchableOpacity,
    Image,
    View
} from 'react-native';
import {
    createDrawerNavigator,
} from "react-navigation";

import ControlPane from '../containers/controlPane/controlPane';
import TabBar from './tabBar';

const {width,height} = Dimensions.get('window');

export default Drawer = createDrawerNavigator({
    TabBar: {
        screen: TabBar,
        navigationOptions: {
            header: null
        }
    },
},
{
    //drawerPosition 可控制該抽屜是否彈出的方向
    drawerPosition:'left',
    drawerWidth: width * 0.8,
    //drawerLockMode 可控制該抽屜是否鎖定
    drawerLockMode:'locked-closed',
    useNativeAnimations:true,
    //contentComponent 放置彈出的抽屜內(nèi)容
    contentComponent: props => {
        return <ControlPane {...props}/>;
    }
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岔乔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滚躯,更是在濱河造成了極大的恐慌雏门,老刑警劉巖嘿歌,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茁影,居然都是意外死亡宙帝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門募闲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來步脓,“玉大人,你說我怎么就攤上這事蝇更。” “怎么了呼盆?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵年扩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我访圃,道長(zhǎng)厨幻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任腿时,我火速辦了婚禮况脆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘批糟。我一直安慰自己格了,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布徽鼎。 她就那樣靜靜地躺著盛末,像睡著了一般。 火紅的嫁衣襯著肌膚如雪否淤。 梳的紋絲不亂的頭發(fā)上悄但,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音石抡,去河邊找鬼檐嚣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啰扛,可吹牛的內(nèi)容都是我干的嚎京。 我是一名探鬼主播隐解,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼厢漩!你這毒婦竟也來了膜眠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤架谎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辟躏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捎琐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑞凑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡籽御,死狀恐怖练慕,靈堂內(nèi)的尸體忽然破棺而出技掏,到底是詐尸還是另有隱情,我是刑警寧澤哑梳,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站鸠真,受9級(jí)特大地震影響哪工,放射性物質(zhì)發(fā)生泄漏弧哎。R本人自食惡果不足惜雁比,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撤嫩。 院中可真熱鬧偎捎,春花似錦、人聲如沸序攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽程奠。三九已至丈牢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞄沙,已是汗流浹背己沛。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工慌核, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人申尼。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓垮卓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親师幕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粟按,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容