rn中的路由需求文檔

一、概念

用來指定如何在app內(nèi)部實(shí)現(xiàn)頁面跳轉(zhuǎn)

二、使用場(chǎng)景

  • 端外拉起app后,跳轉(zhuǎn)到指定頁面

  • 端內(nèi)跳轉(zhuǎn)到指定頁面

  • h5、native、rn不同的頁面之間都可以互相跳轉(zhuǎn)、傳遞參數(shù)

image.png

三、目標(biāo)

  • 一個(gè)UI頁面與一個(gè)uri關(guān)聯(lián),用Uri替代我們的頁面。

  • 跳轉(zhuǎn)的時(shí)候就不需要強(qiáng)依賴UI頁面去做匹配,而只需要通過一段字符串去匹配就行

  • 實(shí)現(xiàn)頁面之間的解耦、跳轉(zhuǎn)、傳參

四、優(yōu)缺點(diǎn)分析

和傳統(tǒng)native路由跳轉(zhuǎn)相比較:

  • 簡(jiǎn)單易讀。通過字符串實(shí)現(xiàn)跳轉(zhuǎn)頁面并傳參

  • 頁面解耦。實(shí)現(xiàn)頁面間完全解耦

  • 靈活性強(qiáng)??赏ㄟ^動(dòng)態(tài)下發(fā)不同的字符串,動(dòng)態(tài)控制跳轉(zhuǎn)的邏輯

  • 參數(shù)有限制。不支持復(fù)雜的數(shù)據(jù)格式

  • 依賴客戶端路由模塊的實(shí)現(xiàn)

五、技術(shù)調(diào)研

動(dòng)態(tài)路由方案

  • android

https://juejin.cn/post/7169017197442891806

  • iOS

https://juejin.cn/post/7087875341460439071

六、方案內(nèi)容

6.1、Uri格式

整體參考uri的格式

基本格式 = protocol://hostname/path = 協(xié)議://主機(jī)地址/路徑

image.png
  • protocal: 協(xié)議頭,對(duì)應(yīng)吊起app的協(xié)議scheme,用于端外,吊起app

  • hostname/path: 域名和路徑,用來指定頁面形態(tài),native、hrn、h5

  • query: 參數(shù)。注意:只支持字符串格式。不包含端口號(hào)

    • pName: 頁面名稱

    • 容器參數(shù):設(shè)置容器的初始化參數(shù)

    • rcName: rn中指定頁面的入口組件

    • 業(yè)務(wù)參數(shù): 頁面內(nèi)部使用的參數(shù)

示例:

app外

protocol://protal/containerType?pName=pageA&query=1

app內(nèi)

  • rn跳rn, h5跳rn
image.png
  • rn跳native,h5跳native
image.png
  • rn跳h5
image.png

6.2、參數(shù)

query信息分為三部分:

  • pName:頁面名稱【必填】

  • 給容器使用的參數(shù):指定容器的一些行為. 所有字段使用rnc開頭

  • 業(yè)務(wù)參數(shù): 業(yè)務(wù)內(nèi)部使用

 protal/hrn?pName=pageA&rncDegradeUrl=www.baidu.com
protal/hrn?pName=pageA&rncDegradeUrl=www.baidu.com&rncDegradeVersion=1.0.0&rncTransparent=1&rcName=index&id=123&name=zhangsan  

6.2.1、容器參數(shù)

query參數(shù)預(yù)留字段,指容器使用的字段:

預(yù)留字段命名規(guī)范:盡量避免和業(yè)務(wù)參數(shù)重名,推薦添加rn前綴 rnc react-native-container 和 react-native-config的簡(jiǎn)寫

qurey字段名 含義 數(shù)據(jù)格式 默認(rèn)值 示例
pName 頁面名稱。rn里也指bundle的名稱 字符串 必填 pName=pageA
rncDegradeUrl 降級(jí)的url urldecode以后得url鏈接 undefined: 默認(rèn)沒有值 https://www.baidu.com
rncDegradeVersion 在某個(gè)版本以上降級(jí),更低的版本不允許降級(jí) 字符串 undefined:默認(rèn)沒有值,不指定版本 “1.0.0”
rnIsDegrade 是否允許頁面降級(jí) 字符串, '0' 或者 ‘1’ “0”:不降級(jí) 1
rnType 容器類型 "screen" "view" “screen”
rncTransparent 容器是否透明 字符串 “0” ~ “1” “0”: 不透明,可以設(shè)置其他0-1之間的值。1:全透明 0
rncHeight 50% 400px
rncRouterType 路由跳轉(zhuǎn)的類型,用來控制是否走全頁面觸達(dá)的邏輯 字符串 base rncRouterType=base;rncRouterType=allPage,當(dāng)值為allPage的時(shí)候,相關(guān)參數(shù)需要按照全頁面觸達(dá)的要求傳參
rncIsTranslucentBar 是否沉浸式導(dǎo)航欄, 字符串 true rncIsTranslucentBar=true
rncBarMode 狀態(tài)欄文字的顏色 字符串 dark rncBarMode=dark light
hasTitleBar 是否為原始的頭部(Android 專用) 字符串 false hasTitleBar=false;hasTitleBar=true;一般情況下不需要傳,只有一些特殊頁面需要傳
字段名 含義 數(shù)據(jù)格式 默認(rèn)值 示例
rcName 加載的入口組件名稱,registerComponentName 字符串 index name="demo"
其他初始化參數(shù) rn頁面初始化的時(shí)候,傳遞的業(yè)務(wù)參數(shù) 字符串 undefined

native需要的參數(shù)(技術(shù)文檔:

https://alidocs.dingtalk.com/i/nodes/XPwkYGxZV3RP27rAFjoLwyaGWAgozOKL?utm_scene=team_space&utm_source=dingdoc_doc&utm_medium=dingdoc_doc_plugin_card

https://alidocs.dingtalk.com/i/nodes/m9bN7RYPWdlGzr1OUl0o9YqAWZd1wyK0?utm_scene=team_space&utm_source=dingdoc_doc&utm_medium=dingdoc_doc_plugin_card

<colgroup><col width="176"><col width="176"><col width="176"><col width="176"><col width="176"></colgroup>

參數(shù)名 含義 數(shù)據(jù)格式
redirectType native跳轉(zhuǎn)的類型 字符串
redirectValue 具體的內(nèi)容 json字符串

6.2.2、參數(shù)的數(shù)據(jù)格式

下表為支持的數(shù)據(jù)格式,以及對(duì)應(yīng)的簡(jiǎn)寫,

只支持基本數(shù)據(jù)格式,不支持?jǐn)?shù)組、字典等復(fù)雜的結(jié)構(gòu)

數(shù)據(jù)格式 iOS的類 Android的類 簡(jiǎn)寫前綴
字符串 NSString String S_
boolean BOOL boolean B_
數(shù)字 int NSInteger int I_
數(shù)字 float float float F_
數(shù)字double double double D_
數(shù)組 A_
map M_

示例:

比如需要往目標(biāo)頁面pageA傳遞三個(gè)參數(shù):

  • id:數(shù)字類型,1234535

  • name:字符串類型,zhangsan

最終的跳轉(zhuǎn)鏈接如下:

protal/native?pName=pageA&id=I_1234535&name=S_zhangsan

6.2.3、參數(shù)處理邏輯

除pName、rcName、rnc開頭的參數(shù),其它參數(shù)傳遞到rn頁面內(nèi)

6.2.4、當(dāng)前app的現(xiàn)狀

  • 暫無通用路由模塊,主要以硬編碼實(shí)現(xiàn)跳轉(zhuǎn)為主。

  • 有全頁面觸達(dá)邏輯,

    • 需要提前配置好,只支持配置好的頁面

6.2.5、rn中頁面跳轉(zhuǎn)邏輯

image.png
  • Android現(xiàn)在的架構(gòu)設(shè)計(jì),對(duì)路由跳轉(zhuǎn)有何影響

  • Android實(shí)現(xiàn)頁面跳轉(zhuǎn)邏輯的實(shí)現(xiàn)是怎么樣的,和通用路由協(xié)議是否有沖突的地方

    • 是否必須使用全頁面觸達(dá),如果不通過全頁面觸達(dá)是否有影響

    • 除了全頁面觸達(dá)的邏輯,還有沒有實(shí)現(xiàn)頁面跳轉(zhuǎn)的寫法

  • 全頁面觸達(dá)對(duì)通用路由協(xié)議的影響和相互之間的關(guān)系應(yīng)該是怎么樣的

七、風(fēng)險(xiǎn)

  • 安全性

八、收益

九、方案評(píng)估結(jié)論

十、人員、排期

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容