在React native開發中,經常需要獲取螢幕寬高設定佈局,或者是取螢幕寬高百分比設定佈局。
通常做法都是建立一個工具檔案比如utils.js,然後在工具檔案中提前把螢幕寬高取出來,再建立一個get方法來獲取對應的值。如此我們在哪裡使用就需要在哪裡匯入utils.js,再執行get方法獲取對應的值。
如果有一百個地方使用螢幕寬高,那就需要匯入100次,再get100次方法!
思來想去上面做法太雞肋,有什麼辦法讓我們只需獲取一次,終身享用呢?
當然有!
此刻該我們的主角Global閃亮登場了。
螢幕寬高是個固定值我們完全可以在初始化的時候獲取,然後存起來,之後賦值給一個全域性變數。
既然是全域性變數,那全世界人民都能用到它,想在哪裡用就在哪裡用,媽媽再也不用擔心我天天get去拿值。
有了思路直接開幹!
先建立一個constant.js,專門負責初始化全變數(全域性變數的值也就是我們認定的常量值),然後在專案的入口檔案第一行先匯入constant.js。
匯入constant.js記得加上註釋。重要的事情說三遍:
1:在專案入口檔案匯入constant.js地方加上註釋!
2:在專案入口檔案匯入constant.js地方加上註釋!
3:在專案入口檔案匯入constant.js地方加上註釋!
搞完之後我們就可以“肆意妄為”了,在程式碼中有用到螢幕寬高的地方我們都可以直接使用width和height變數來作為螢幕的寬高,再也不需要先匯入再get才能拿到螢幕的寬高值。
此刻心情是不是有種,想要飛一樣的感覺——
Write once Use anywhere!
同樣我們可以把專案中所有常量都在constant.js中初始化且掛載到Global上,比如平臺,iphoneX, iphoneXR的判斷 ,導航欄StatusBar的高度等等。如下:
為了避免和專案中其它人定義的變數名衝突或者是React native提供的全域性變數名衝突,我會在全域性變數前面加上專案縮寫,比如上面加wb,使用_也可以,看個人習慣。
constant.js裡面不僅僅可以放變數,我們還可以把專案中大量重複使用的方法放到它裡面,例如螢幕適配方法,每個設定UI寬高的地方都要用到次此方法,如下:
nice,把大夥都湊到一起,我們就可以專案裡面‘為所欲為’了。
完成專案中所有常量在constant.js中初始化後,可能有人就會問,我能不能把變數也放到Global上?答案當然是可以的,只是Global一臉嫌棄。
通常我個人喜歡把請求介面使用到的token也放到Global上,在使用者登陸之後對Global中存放token變數進行賦值。如果公司token是時刻重新整理的,也就需要我們時刻重新整理存放token的全域性變數的值。
到這裡有人可能會有顧慮,Global中的變數任何地方都能使用,任何地方都能隨意修改,一旦出現bug,那問題追蹤豈不是要了老命?
確實是如此,大家在專案中任何地方都隨意修改全域性變數中的值,問題追蹤真的會要我們半條老命。
所以堅決不推薦把經常修改的變數掛載到Global中以及禁止專案成員隨意修改Global中的值。
在Spring Boot中約定優於配置,類似我們在使用Global變數的時候需要嚴格遵守上述約定,不然會物極其反 ,只有遵守了約定,才能更好發揮Write once Use anywhere。
沒有萬能的方案,
只有適合的方案,
願和你一起探索一起前進!
關於作者:範跑跑,普元React-native開發工程師,畢業於長沙理工大學,專注於使用React-native開發APP,負責太平洋保險APP內部保險箱務RN改造業務。