來點干貨,ReactNative Navigate導(dǎo)航優(yōu)化

ReactNative 優(yōu)化一直是很頭疼的事情.
很多人都說,它的性能相當(dāng)于安卓2.0的時代.
尤其是ListView的復(fù)用功能現(xiàn)在一直沒有出來.

下面我就針對導(dǎo)航來寫一點點代碼.

問題一:使用 navigator.push 點擊跳轉(zhuǎn)后丙号,手指滑動可以返回上一頁先朦,但是打log發(fā)現(xiàn)并沒有調(diào)用 pop 方法缰冤,而且還是可以滑動回去,根本原因暫不追究喳魏,上代碼:

var data = null;  
    if(title === '首頁'){  
      data = this.state.data;  
    }  
    return <Navigator  
      style={{flex:1}}  
      initialRoute={{  
          component: component,  
          title: title,  
          passProps:{  
            data: data  
          }  
        }}  
      configureScene={(route) => {  
        return Navigator.SceneConfigs.HorizontalSwipeJumpFromRight;  
      }}

這個是主要的路由棉浸,后來發(fā)現(xiàn)關(guān)鍵在于:
return Navigator.SceneConfigs.HorizontalSwipeJumpFromRight;
詳細(xì)配置請看源代碼的: node_modules/react-native/Libraries/CustomComponents/Navigator/NavigatorSceneConfigs.js

HorizontalSwipeJumpFromRight: {  
    ...BaseConfig,  
    gestures: {  
      jumpBack: {  
        ...BaseRightToLeftGesture,  
        overswipe: BaseOverswipeConfig,  
        edgeHitWidth: null,  
        isDetachable: true,  
      },  
      jumpForward: {  
        ...BaseLeftToRightGesture,  
        overswipe: BaseOverswipeConfig,  
        edgeHitWidth: null,  
        isDetachable: true,  
      },  
      pop: BaseRightToLeftGesture,  
    },  
    animationInterpolators: {  
      into: buildStyleInterpolator(FromTheLeft),  
      out: buildStyleInterpolator(FadeToTheRight),  
    },  
  },  

關(guān)鍵就在 gestures:{} 里面,我們可以在源碼里找到:

FadeAndroid: {  
    ...BaseConfig,  
    gestures: null,  
    animationInterpolators: {  
      into: buildStyleInterpolator(FadeIn),  
      out: buildStyleInterpolator(FadeOut),  
    },  
  },  

就不難發(fā)現(xiàn)刺彩,只要把gestures設(shè)置成null迷郑,就不能觸摸返回了!

發(fā)現(xiàn)在網(wǎng)上找了很多文章,都沒有寫過清空路由的問題,也只是介紹了下API

API

initialRoute:定義啟動時加載的路由创倔。路由是導(dǎo)航欄用來識別渲染場景的一個對象嗡害。 initialRoute
 必須是 initialRouteStack(路由棧)
 中的一個路由。initialRoute
 默認(rèn)為 initialRouteStack
 中最后一項

initialRouteStack:提供一個路由集合用來初始化畦攘。如果沒有設(shè)置初始路由的話則必須設(shè)置該屬性霸妹。如果沒有提供該屬性,它將被默認(rèn)設(shè)置成一個只含有 initialRoute
 的數(shù)組

naviagtionBar:可選參數(shù)知押,提供一個在場景切換的時候保持的導(dǎo)航欄

navigator:可選參數(shù)叹螟,提供從父導(dǎo)航器獲得的導(dǎo)航器對象

onDidFocus:每當(dāng)導(dǎo)航切換完成或初始化之后,調(diào)用此回調(diào)朗徊,參數(shù)為新場景的路由

onWillFocus:會在導(dǎo)航切換之前調(diào)用首妖,參數(shù)為目標(biāo)路由器

renderScene:必要參數(shù),用來渲染指定路由的場景爷恳。調(diào)用的參數(shù)是路由和導(dǎo)航器


如果你得到一個 navigator對象
 的引用有缆,則可以調(diào)用許多方法來進行導(dǎo)航getCurrentRoutes():獲取當(dāng)前棧里的路由,也就是push進來温亲,沒有pop掉的那些
jumpBack():跳回之前的路由棚壁,當(dāng)前前提是保留現(xiàn)在的,還可以再跳回來栈虚,會給你保留原樣
jumpForward():上一個方法不是盜用之前的路由袖外,用這個就可以跳回來了
push(route):跳轉(zhuǎn)到新場景,并且將場景入棧魂务,你可以稍后跳轉(zhuǎn)過去
pop():跳轉(zhuǎn)回去并且卸載掉當(dāng)前場景
replace(route):用一個新的路由替換掉當(dāng)前場景
replaceAtIndex(route, index):替換掉指定序列的路由場景
replacePrevious(route):替換掉之前的場景
resetTO(route):跳轉(zhuǎn)到新場景曼验,并且重置整個路由棧
immediatelyResetRouteStack(routeStack):用新的路由數(shù)組來重置路由棧
popToRoute(route):pop到路由指定的場景,在整個路由棧中粘姜,處于指定場景之后的場景將會被卸載
popToTop():pop到棧中的第一個場景鬓照,卸載掉所有的其它場景
Paste_Image.png

好吧,時間有限,源碼我就不貼出來了,請自行查看,后期我再詳細(xì)補上.

清空路由的代碼

在主控制器里這么創(chuàng)建
<Navigator
                    ref='navigator'
                    style={styles.navigator}
                    configureScene={this.configureScene}
                    renderScene={(route, navigator) => {
                        let Component = route.component;
                        return (
                            <Component navigator={navigator} route={route} {...route.passProps} />
                        )
                    } }

                    initialRouteStack={
                       [ {
                            component: Platform.OS === 'ios' ? Main : AndroidMain,
                        name: '主頁'
                        }]
                    }
                    />

注意這里要給個數(shù)組   如果initialRouteStack 沒有的話,那就必須創(chuàng)建一個initialRoute

比如說 你調(diào)到2-3-4-5-6級頁面后,你突然想反回首頁.那么這時候你使用push的話就會入棧.
反復(fù)執(zhí)行的話,內(nèi)存就會迅速增加.
所以返回代碼如下:

InteractionManager.runAfterInteractions()
        {

            this.props.navigator.immediatelyResetRouteStack(
                [{
                component: XXX,
                }]
            );
        }

好了 清空所有路由 并且創(chuàng)建新的路由.稍微優(yōu)化了一些功能.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孤紧,隨后出現(xiàn)的幾起案子豺裆,更是在濱河造成了極大的恐慌,老刑警劉巖号显,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臭猜,死亡現(xiàn)場離奇詭異躺酒,居然都是意外死亡,警方通過查閱死者的電腦和手機蔑歌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門羹应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丐膝,你說我怎么就攤上這事量愧。” “怎么了帅矗?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵偎肃,是天一觀的道長。 經(jīng)常有香客問我浑此,道長累颂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任凛俱,我火速辦了婚禮紊馏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒲犬。我一直安慰自己朱监,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布原叮。 她就那樣靜靜地躺著赫编,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奋隶。 梳的紋絲不亂的頭發(fā)上擂送,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音唯欣,去河邊找鬼嘹吨。 笑死,一個胖子當(dāng)著我的面吹牛境氢,可吹牛的內(nèi)容都是我干的蟀拷。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼萍聊,長吁一口氣:“原來是場噩夢啊……” “哼匹厘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脐区,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎她按,沒想到半個月后牛隅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炕柔,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年媒佣,在試婚紗的時候發(fā)現(xiàn)自己被綠了匕累。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡默伍,死狀恐怖欢嘿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情也糊,我是刑警寧澤炼蹦,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站狸剃,受9級特大地震影響掐隐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钞馁,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一虑省、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僧凰,春花似錦探颈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隙弛,卻和暖如春架馋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背全闷。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工叉寂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人总珠。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓屏鳍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親局服。 傳聞我的和親對象是個殘疾皇子钓瞭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件淫奔、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 心情不好的時候山涡,老是想睡覺,覺得無精打采,而且吃飯也吃得特別多鸭丛,吃撐了也當(dāng)沒吃飽竞穷。 看了脫不花姐姐的一些想法,突然...
    Firewinter閱讀 232評論 0 0