React Native封裝導(dǎo)航欄組件

前言

RN開發(fā)頁面時花鹅,基本上每一個頁面我們都需要有導(dǎo)航欄,但是ReactNative又不像iOS那樣,只要控制器包裹一個導(dǎo)航控制器盔然,后面的頁面就有了默認(rèn)的導(dǎo)航欄樣式,RN中的導(dǎo)航欄需要自己實現(xiàn)。當(dāng)幾個頁面還好崇众,我們復(fù)制粘貼也還行,但是當(dāng)整個項目工程幾十個頁面時麻顶,每次創(chuàng)建導(dǎo)航欄我們都去復(fù)制粘貼這個也未免太low了。這時我們自定義一個高度可擴展的導(dǎo)航欄就勢在必行了。此導(dǎo)航欄組件也是作者在之前開源的個人RN項目OneM中抽離出來的獨立的組件。如果想查看OneM項目請點擊

預(yù)覽效果

navBar

導(dǎo)航欄組件源碼地址

https://github.com/guangqiang-liu/react-native-navigator-component-demo

組件支持哪些自定義配置

  • 支持自定義導(dǎo)航欄的樣式蚕键,任意修改背景顏色寄猩,高度等
  • 導(dǎo)航欄左按鈕支持自定義icon圖標(biāo),支持任意修改圖標(biāo)顏色和尺寸,支持自定義點擊事件
  • 導(dǎo)航欄左按鈕支持自定義文本兽赁,支持任意修改文本顏色和字號惊科,支持自定義點擊事件
  • 導(dǎo)航欄右按鈕支持自定義icon圖標(biāo)蜡娶,支持任意修改圖標(biāo)顏色和尺寸混卵,支持自定義點擊事件
  • 導(dǎo)航欄右按鈕支持自定義文本,支持任意修改文本顏色和字號窖张,支持自定義點擊事件
  • 導(dǎo)航欄標(biāo)題支持正標(biāo)題和副標(biāo)題顯示等等

全部的可配置選項

const navBarConfig = {
  navigationBarProps: PropTypes.Object,
  onLeftPress: PropTypes.fun,
  onRightPress: PropTypes.fun,
  hiddenNav: PropTypes.bool,
  navBarStyle: PropTypes.Object,
  navContentStyle: PropTypes.Object,
  hiddenLeftItem: PropTypes.bool,
  leftIcon: PropTypes.Object,
  leftTitle: PropTypes.string,
  leftTitleStyle: PropTypes.Object,
  leftItemStyle: PropTypes.Object,
  titleStyle: PropTypes.Object,
  title: PropTypes.string,
  subTitleStyle: PropTypes.Object,
  subTitle: PropTypes.string,
  hiddenRightItem: PropTypes.bool,
  rightIcon: PropTypes.Object,
  rightTitle: PropTypes.string,
  rightTitleStyle: PropTypes.Object,
  rightItemStyle: PropTypes.Object
}

如何使用

  • 使用自定義導(dǎo)航欄的頁面都統(tǒng)一繼承自BaseComponent基類組件
  • 重寫navigationBarProps函數(shù)幕随,配置導(dǎo)航欄內(nèi)容
  • 重寫左右按鈕的點擊事件onLeftPress() {}onRightPress() {}
  • 重寫render函數(shù)碎赢,注意是帶下劃線的render函數(shù): _render() {}

示例Demo代碼

import React, { Component } from 'react'
import {BaseComponent} from './baseComponent/baseComponent'
import {
  Platform,
  StyleSheet,
  Text,
  View
} from 'react-native';

const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' +
  'Cmd+D or shake for dev menu',
  android: 'Double tap R on your keyboard to reload,\n' +
  'Shake or press menu button for dev menu',
});

export default class App extends BaseComponent {

  navigationBarProps() {
    return {
      title: 'APP',
      subTitle: 'subTitle',
      rightIcon: {
        name: 'rocket',
        size: 20,
        color: '#333'
      }
    }
  }

  onLeftPress() {
    alert('點擊了左邊的按鈕')
  }
  onRightPress() {
    alert('點擊了右邊的按鈕')
  }

  _render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit App.js
        </Text>
        <Text style={styles.instructions}>
          {instructions}
        </Text>
      </View>
    )
  }
}

const 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,
  },
})

注意

項目中使用到了IconFont技術(shù),如果想了解如何使用IconFont及自定義自己的font庫,請查看作者的IconFont詳細接入指南:http://www.reibang.com/p/9f6db8e38852

總結(jié)

當(dāng)我們封裝了一套高度可定制的導(dǎo)航欄組件后油挥,我們會發(fā)現(xiàn)原來開發(fā)一個頁面是如此之快深寥,這也大大的提高了代碼的重用率,同時也便于后期統(tǒng)一的修改導(dǎo)航欄樣式贤牛,簡直是一舉多得惋鹅。好了,如果同學(xué)們感覺文章對你有幫助請給個 star 給個 關(guān)注 謝謝殉簸。

福利時間

  • 作者React Native開源項目OneM地址(按照企業(yè)開發(fā)標(biāo)準(zhǔn)搭建框架設(shè)計開發(fā)):https://github.com/guangqiang-liu/OneM (歡迎小伙伴們 star)
  • 作者簡書主頁:包含50多篇RN開發(fā)相關(guān)的技術(shù)文章http://www.reibang.com/u/023338566ca5 (歡迎小伙伴們:多多關(guān)注闰集,多多點贊)
  • 作者React Native QQ技術(shù)交流群:620792950 歡迎小伙伴進群交流學(xué)習(xí)
  • 友情提示:在開發(fā)中有遇到RN相關(guān)的技術(shù)問題,歡迎小伙伴加入交流群(620792950)般卑,在群里提問武鲁、互相交流學(xué)習(xí)。交流群也定期更新最新的RN學(xué)習(xí)資料給大家蝠检,謝謝支持沐鼠!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叹谁,隨后出現(xiàn)的幾起案子饲梭,更是在濱河造成了極大的恐慌,老刑警劉巖焰檩,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔涉,死亡現(xiàn)場離奇詭異,居然都是意外死亡析苫,警方通過查閱死者的電腦和手機兜叨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衩侥,“玉大人浪腐,你說我怎么就攤上這事《倨梗” “怎么了议街?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長璧榄。 經(jīng)常有香客問我特漩,道長,這世上最難降的妖魔是什么骨杂? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任涂身,我火速辦了婚禮,結(jié)果婚禮上搓蚪,老公的妹妹穿的比我還像新娘蛤售。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布悴能。 她就那樣靜靜地躺著揣钦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漠酿。 梳的紋絲不亂的頭發(fā)上冯凹,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天炒嘲,我揣著相機與錄音宇姚,去河邊找鬼。 笑死夫凸,一個胖子當(dāng)著我的面吹牛浑劳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夭拌,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼呀洲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啼止?” 一聲冷哼從身側(cè)響起道逗,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎献烦,沒想到半個月后滓窍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡巩那,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年吏夯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片即横。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡噪生,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出东囚,到底是詐尸還是另有隱情跺嗽,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布页藻,位于F島的核電站桨嫁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏份帐。R本人自食惡果不足惜璃吧,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望废境。 院中可真熱鬧畜挨,春花似錦筒繁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至务冕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幻赚,已是汗流浹背禀忆。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留落恼,地道東北人箩退。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像佳谦,于是被迫代替她去往敵國和親戴涝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫钻蔑、插件啥刻、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,058評論 4 62
  • 文字從來就不應(yīng)該被玷污。
    月轉(zhuǎn)長廊閱讀 78評論 0 1
  • 前不久網(wǎng)友木子跟我說:我老公對他的初戀念念不忘映跟。 說真的,我一點都不詫異扬虚。 木子和她老公是高中同學(xué)努隙。我不知道她老公...
    羨魚閱讀 1,988評論 0 6
  • 今天荸镊,在朋友圈看到一個朋友發(fā)了一句話加幾張圖,姑且稱為朋友吧堪置。 我們有幾年沒見了贷洲,朋友是初中認(rèn)識的,坐過同桌晋柱,當(dāng)時...
    千葉的心情日記閱讀 490評論 0 0