成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Mobx + React Native 獲取路由的狀態(tài)信息

李濤 / 2222人閱讀

摘要:年前公司由一個(gè)項(xiàng)目是使用來(lái)開(kāi)發(fā)的所以遇到了一些問(wèn)題比較影響開(kāi)發(fā)進(jìn)程的就是路由問(wèn)題了實(shí)際上就是這個(gè)組件比較難懂這里給大家講解一下希望大家少踩點(diǎn)坑另外本篇文章使用的是環(huán)境主要講解的還是如何使用記錄中路由的狀態(tài)但是會(huì)穿插一些小內(nèi)容這里雖然講到的是

年前公司由一個(gè)項(xiàng)目是使用 ReactNative 來(lái)開(kāi)發(fā)的所以遇到了一些問(wèn)題,比較影響開(kāi)發(fā)進(jìn)程的就是路由問(wèn)題了,實(shí)際上就是 ReactNavigation 這個(gè)組件比較難懂,這里給大家講解一下,希望大家少踩點(diǎn)坑.另外本篇文章使用的是 TypeScript環(huán)境

主要講解的還是 如何使用Mobx記錄ReactNative中路由的狀態(tài) 但是會(huì)穿插一些小內(nèi)容,這里雖然講到的是 Mobx , 如果你使用的是 redux 的話(huà)也不用灰心,原理都是一樣的,只要能看懂這篇文章,那我相信對(duì)于 ReactNavigation 有了更深的了解

ReactNavigation的官網(wǎng)上面有redux的教程
API介紹

在開(kāi)發(fā)之前我先向大家介紹一下需要使用到的API

NavigationActions

getStateForAction

addNavigationHelpers

NavigationActions里面存在了很多方法,在這里我先講 NavigationActions.init(), 實(shí)際上是用來(lái)獲取 初始狀態(tài) 的路由信息,當(dāng)然你也可以不使用這個(gè)API,來(lái)自己手動(dòng)寫(xiě)出初始的路由狀態(tài),但是我不太推薦這個(gè)方法,第一個(gè)是路由擴(kuò)展的時(shí)候你又要去重新改,第二個(gè)是ReactNavigation這個(gè)庫(kù)的改動(dòng)很頻繁,說(shuō)不定哪一天就變了個(gè)格式,到時(shí)候你又要重寫(xiě)

getStateForAction(action, state) 提供一個(gè) action上一次的路由狀態(tài) 從而獲取最新的路由狀態(tài)

addNavigationHelpers(navigation) 是記錄路由狀態(tài)的核心方法,如何理解呢?我們看到他的參數(shù)是 navigation 這是一個(gè)對(duì)象,我們這里只講其中的兩個(gè)值 statedispatch,這里的 dispatchreduxdispatch 的概念是相似的,在 ReactNavigation 里面每次路由的改變,他都會(huì)在里面觸發(fā) dispatch 并且傳遞一個(gè) action,有了action之后可以通過(guò)getStateForAction來(lái)獲取當(dāng)前路由的state.state則是保證當(dāng)前建立的路由信息和Mobx保存的路由信息的一致性

實(shí)現(xiàn)代碼
import * as React from "react";
import * as stores from "@stores";

import Router from "./router";// 自己定義的路由結(jié)構(gòu)

import { Provider } from "mobx-react/native";
import { addNavigationHelpers } from "react-navigation";

import { observer } from "mobx-react";
import { useStrict } from "mobx";

useStrict(true);
console.disableYellowBox = true;

interface Props {}

interface State {}

@observer
export default class App extends React.Component {
  constructor(props, context) {
    super(props, context);
  }

  render() {
    let { nav } = stores;
    return (
      
        
      
    );
  }
}
// store
import { observable, action, computed } from "mobx";
import { NavigationActions, NavigationState } from "react-navigation";

import RootRouter from "@router/index"; // 自己定義的路由結(jié)構(gòu)

export class NavStore {
  @observable.ref navigatorState: NavigationState;

  constructor() {
    this.navigatorState = RootRouter.router.getStateForAction(
      NavigationActions.init(),
      null
    );
  }

  // 提供一個(gè)獲取當(dāng)前路由層級(jí)的功能
  private getRouterName(state) {
    let childRouters = state.routes;
    if (childRouters && childRouters.length > 0) {
      let curRouterName = childRouters[state.index].routeName;
      let nextRouterName = this.getRouterName(childRouters[state.index]);
      let result = nextRouterName ? "-" + nextRouterName : "";
      return curRouterName + result;
    }
    return "";
  }

  @computed
  get routerName() {
    return this.getRouterName(this.navigatorState);
  }

  @action
  dispatch(action) {
    const previousNavState =  this.navigatorState;
    return (this.navigatorState = RootRouter.router.getStateForAction(
      action,
      previousNavState
    ));
  }
}

export default new NavStore();

大家對(duì) Mobx 不熟悉的話(huà)其實(shí)看我前面API的介紹就好了,核心就是addNavigationHelpers 提供了覆蓋 dispatch同步state 的功能,只要理解了這個(gè),無(wú)論你使用 redux 還是 Mobx 都不是問(wèn)題

另外一些小問(wèn)題

在開(kāi)發(fā) ReactNative 的時(shí)候可能在某個(gè)頁(yè)面需要跳轉(zhuǎn),這個(gè)時(shí)候你不得不把 navigation 從頭傳到底,這種體驗(yàn)很糟糕我更推薦使用一些 API快速跳轉(zhuǎn) 或者 傳遞參數(shù)

  import { NavigationActions } from "react-navigation";

  // 使用我上面定義的dispatch 
  
  // 簡(jiǎn)單跳轉(zhuǎn)  
  dispatch(
    NavigationActions.navigate({ routeName: "Search" })
  );
 
  // 帶參數(shù)跳轉(zhuǎn)  
  dispatch(
    NavigationActions.navigate({ 
        routeName: "Search" , 
        params : { name : "Jason "} 
    })
  )
  
  // 多級(jí)跳轉(zhuǎn)
  dispatch(
    NavigationActions.navigate({ 
        routeName: "Search",
        action : NavigationActions.navigate({ routeName: "User" })
    })
  );
這篇文章是年前的 ReactNavigation 文檔,剛剛上去又看了一下發(fā)現(xiàn)有些改動(dòng),我研究下有沒(méi)有需要改動(dòng)的地方,不過(guò)大致看了下,應(yīng)該沒(méi)啥變化

參考資料:

React Navigation 官方文檔

React Navigation with MobX (Paul Xue)【內(nèi)含Github地址】

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92981.html

相關(guān)文章

  • 前端每周清單半年盤(pán)點(diǎn)之 ReactReactNative

    摘要:前端每周清單半年盤(pán)點(diǎn)之與篇前端每周清單專(zhuān)注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開(kāi)發(fā)者的討論。 前端每周清單半年盤(pán)點(diǎn)之 React 與 ReactNative 篇 前端每周清單專(zhuān)注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為...

    Barry_Ng 評(píng)論0 收藏0
  • React 328道最全面試題(持續(xù)更新)

    摘要:希望大家在這浮夸的前端圈里,保持冷靜,堅(jiān)持每天花分鐘來(lái)學(xué)習(xí)與思考。 今天的React題沒(méi)有太多的故事…… 半個(gè)月前出了248個(gè)Vue的知識(shí)點(diǎn),受到很多朋友的關(guān)注,都強(qiáng)烈要求再出多些React相前的面試題,受到大家的邀請(qǐng),我又找了20多個(gè)React的使用者,他們給出了328道React的面試題,由我整理好發(fā)給大家,同時(shí)發(fā)布在了前端面試每日3+1的React專(zhuān)題,希望對(duì)大家有所幫助,同時(shí)大...

    kumfo 評(píng)論0 收藏0
  • React Native 搭配 MobX 使用心得

    摘要:通過(guò)可以讓識(shí)別列表長(zhǎng)度變化自動(dòng)更新列表,利用維護(hù)項(xiàng)數(shù)據(jù)可以使每個(gè)項(xiàng)保持響應(yīng)式卻互不影響,對(duì)長(zhǎng)列表優(yōu)化效果很明顯。最好的方式是將數(shù)據(jù)統(tǒng)一放在中,子組件通過(guò)方式獲取數(shù)據(jù)。 MobX 是一款十分優(yōu)秀的狀態(tài)管理庫(kù),不但書(shū)寫(xiě)簡(jiǎn)潔還非常高效。當(dāng)然這是我在使用之后才體會(huì)到的,當(dāng)初試水上車(chē)的主要原因是響應(yīng)式,考慮到可能會(huì)更符合 Vue 過(guò)來(lái)的思考方式。然而其實(shí)兩者除了響應(yīng)式以外并沒(méi)有什么相似之處。 在...

    MSchumi 評(píng)論0 收藏0
  • Flutter+Mobx實(shí)戰(zhàn),寫(xiě)一個(gè)App應(yīng)用

    摘要:在這里可以處理一些傳過(guò)來(lái)的參數(shù),然后我們將參數(shù)放入類(lèi)中實(shí)例化。因?yàn)殡m然是一個(gè),但是實(shí)例化的時(shí)候是兩個(gè)不同的,所以第一個(gè)頁(yè)面的數(shù)據(jù)變化了也不會(huì)影響到這里。說(shuō)明 目前增加了路由跳轉(zhuǎn),可以帶參數(shù)跳轉(zhuǎn)頁(yè)面。下拉可以自定義刷新樣式,IOS點(diǎn)擊Status Bar回到頂部,目前已經(jīng)測(cè)試過(guò)。狀態(tài)管理器使用Mobx,我自己覺(jué)得對(duì)于Redux使用起來(lái)會(huì)復(fù)雜一點(diǎn),下面是提供的預(yù)覽GIF圖,卡頓現(xiàn)象是因?yàn)槠聊讳浿?..

    wyk1184 評(píng)論0 收藏0
  • Redux 問(wèn)題:React、MobX 和 Realm 能解決嗎?

    摘要:它是由一個(gè)非常聰明的人開(kāi)發(fā)的,用來(lái)緩解在單頁(yè)面應(yīng)用中管理狀態(tài)的問(wèn)題。的問(wèn)題沒(méi)有一種適合所有場(chǎng)景的完美工具。為設(shè)計(jì)的是世界的另一個(gè)新增內(nèi)容,但目前僅適用于。這將導(dǎo)致最后期限延長(zhǎng),并且留下更多需要我們維護(hù)的代碼。 原文:The Problems with Redux: Can React, MobX, and Realm save us? 作者:Erich Reich 首先,我不討厭 ...

    snifes 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<