優購微零售-已上線專案中,完全使用react-native的一些體會
優購微零售,是一款依託百麗集團的品牌商品,依靠分享推薦商品,既滿足購物需求,同時又能夠獲得分享紅利。
3月25日,公司領導緊急通知,由於原來微零售專案負責人離職,app,h5和app服務端都要由我這邊團隊來做。而且時間特別急,需要在4月底全部提交測試,並在6月1日之前上線。
h5和app服務端我倒是不擔心,主要擔心的就是app。之前那個負責人規劃的是用巢狀H5的方式。但是,我之前有過用類似的方式開發一個helloworld程式的體驗,感覺效果很差。
我的團隊都是以後臺開發為主,只有一個夥伴是幹了半年android的維護,不過他說看過需求,問題不大。
有一個兄弟團隊的人告訴我,用react-native。 看了一天文件,我就決定搞一把了。
為啥會有這個決定呢,其實,我心裡也早就想好了,android這邊問題應該不會很大。所以,前期保證android正常上線,ios稍微拖一兩週也能說得過去。
就此,走上了一條rn的探索道路。
先說下結果,我們在5月上旬開發完了ios的版本提交測試,比原計劃稍微晚了一週左右。5月28日,一次提交就通過了蘋果的稽核。
這次的RN體會,讓我對客戶端開發有了一種愉悅的感覺,之前一直抵觸ios開發,覺得objective-c太彆扭。
遇到幾個問題:
1. 頁面跳轉後隱藏 Tab
2. 跳轉傳參在RCTNavigator.m中 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(__unused UIViewController *)viewController animated:(__unused BOOL)animated 這個方法一開始的地方加入: RCTWrapperViewController * thisController = (RCTWrapperViewController *)viewController; if (navigationController.viewControllers.count > 1) { thisController.tabBarController.tabBar.hidden = YES; } else { thisController.tabBarController.tabBar.hidden = NO; }
我們在使用
this.props.navigator.push({
component: 跳轉到的頁面,
引數一:引數值
});
發現,這個引數一無法在跳轉的頁面裡面接收。
仔細檢查一下我們的navigator系統,我們發現,在設定navigator的時候,我們使用了:
<Component {...route.params} navigator={navigator} />
按照網上一些做法,通過他們都是這樣來傳值的:
在下一個頁面,通過this.props.引數一來獲取。this.props.navigator.push({ component: 跳轉頁面, params: { 引數一:引數值 } })
但是這種方式,在我們這裡始終無法獲取值,真不知道啥原因,求大神指點。
最後我們,在設定navigator的時候,這麼寫的:
<Component {...route.params} navigator={navigator} route={route}/>
加入了route,跳轉傳值還是按照第一種方式,獲取值採用 this.props.route.引數一來獲取傳遞的值。
3. 圖片
建議所有圖片全部放到ios的xcode專案中去,然後採用 require('image!圖片名')的方式,通過相對路徑引用圖片,我們本地老出現檔案編碼錯誤的提示。
4. 儘量不適用 帶IOS字尾的元件
5. 一定要用CodePUSH
6.react-native Image裡面嵌入text實現透明背景
<Image ref='storeBackgroundImage'
source={{uri: 'https://facebook.github.io/react/img/logo_og.png'}}
style={{flex: 3.4,alignItems:'center',justifyContent:'center'}}>
<Image ref='storeLogo' source={{uri: 'https://facebook.github.io/react/img/logo_og.png'}} style={styles.storeImage}/>
<View style={{backgroundColor: 'rgba(0,0,0,0)'}}>
<Text>店鋪的名稱</Text>
</View>
<View style={{backgroundColor: 'rgba(0,0,0,0)'}}>
<Text>店鋪的名稱</Text>
</View>
</Image>
在Text上層巢狀一個View,設定背景色 0,0,0,0即可。
7. 在變數前面加上global. 就是全域性變數
8. 用 `` 實現字串替換
var {id, name} = this.props.user;
var firstName = name.split(' ')[0]; // TODO: problems with i18n
return (
<TouchableOpacity style={styles.pog} onPress={this.props.onPress}>
<Image
style={styles.profilePic}
source={{uri: `http://graph.facebook.com/${id}/picture`}}
/>
<Text style={styles.text}>
{firstName}
</Text>
</TouchableOpacity>
);
後續要加入Redux,還有好多事兒要做。
加油。
相關推薦
優購微零售-已上線專案中,完全使用react-native的一些體會
優購微零售,是一款依託百麗集團的品牌商品,依靠分享推薦商品,既滿足購物需求,同時又能夠獲得分享紅利。 3月25日,公司領導緊急通知,由於原來微零售專案負責人離職,app,h5和app服務端都要由我這邊團隊來做。而且時間特別急,需要在4月底全部提交測試,並在6月1日之前上線。
axios服務封裝,可用於任何支援axios的專案中,包括react和vue都可通用。get/post請求,以及併發請求。以及導航欄隨意切換測試/正式環境
任何專案,只要支援axios,那麼你只要把我現在封裝的服務整個資料夾考過去即可。這個原本是我封裝在vue裡的,但是有一天公司突然來一個緊急的H5微信分享活動的專案,我當時用react搭建(zepto+node搭建其實最好)也是為了挑戰一下自己,畢竟只有三天時間。所以當我把很多vue裡封裝的東西直
在工作過程中,對RabbitMQ的一些體會
先介紹下背景,這個是公司當前的專案雲管理,自動化部署的一個功能。需要通過伺服器批量下發命令到虛擬機器。每臺虛擬機器都裝有客戶端,可以接收RabbitMQ的訊息和向MQ傳送訊息。伺服器的主要功能也是從RabbitMQ傳送和接收訊息。工作流程是這樣的,通過伺服器,將命令下
微信公眾號支付介面(vue專案中,兩種方法)
第一種:引入微信js-sdk //在一個地方呼叫this.weixin()方法,比如說按鈕 //寫微信支付方法 weixin() { var that = this; var url=''; var params = {
取出微服務整體的專案中的單獨一個模組
編寫單獨模組是不需要啟動整個專案的方案 修改服務中的bootstrap配置檔案 有四個關鍵點修改 1.修改資料庫連結配置 datasource: url: jdbc:mysql://localhost:3306/demo?useUnicode=true&am
【Unity3D_常用模組】 Socket網路模組(超級詳細完整,上線專案中穩定使用著)
Socket網路連線模組 主要分為四部分: 一、套接字管理器(SocketManager.cs) 1)、連線 2)、斷開 3)、接收(執行緒) 4)、傳送(攜程) 1.傳送訊息基本方法 2.二進位制方式傳送 3.protobuf方式傳送
關於一個多個.cpp檔案的專案中,函數出現未定義引用錯誤
編譯的話,必須把全部的c檔案都要編譯的啊,只編譯一個c算怎麼個邏輯呢?編譯實際上是2個過程,編譯和連結。編譯過程只檢查所有的符號(變數,函式)有沒有宣告,即只需要h檔案生命就夠了。但是連結時候,需要找到全部的函式的實現體,不把所有的.cpp一起編譯,電腦怎麼知道你還有檔案呢,它又不是神仙會算。簡單說就是,gc
vue專案中,如何對static資料夾下的靜態檔案新增時間戳,以達到清除快取
例如config.js檔案是存放在static資料夾下,裡面存放的是websocket資訊,需要經常改動。改動了以後由於快取資訊,使其不生效,因此需要對引入的檔案新增時間戳。 方法如截圖所示: <script id="main"></script><script type="
無法安裝程式包“Newtonsoft.Json 6.0.4”。你正在嘗試將此程式包安裝到目標為“.NETFramework,Version=v4.7”的專案中,但該程式包不包含任何與該框架相容的程式集
今天在ConsoleApp裡面安裝SignalR.SelfHost,但是預設的SelfHost安裝的JSON檔案是6.0.4不相容.NET框架,只要手動安裝上JSON,再安裝SignalR.SelfHost的時候,就不會安裝預設的JSON了,也就不會出錯了。 Install-Packa
在React專案中,如何優雅的優化長列表
對於較長的列表,比如1000個數組的資料結構,如果想要同時渲染這1000個數據,生成相應的1000個原生dom,我們知道原生的dom元素是很複雜的,如果長列表通過生成如此多的dom元素來實現,很可能使網頁失去響應。 貫穿React核心的就是"virtual dom",我們同樣的可以通過用虛擬列表
使用IdentityServer4,在一個ASPNetCore專案中,配置oidc和api的AccessToken兩種認證授權
1.配置兩種認證方式 JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); services.AddAuthentication(options => {
maven專案中,呼叫了第三方jar包,新增jar到pom中。
直接將jar包拷貝到專案指定目錄下,然後在pom檔案中指定依賴型別為system。 <dependencies> <dependency> <groupId>xxx</groupId> <artifac
在前後端分離的專案中,ajax跨域請求怎樣附帶cookie
在專案的實際開發中,我們總會遇到前後端分離的專案,在這樣的專案中,跨域是第一個要解決的問題,除此之外,儲存使用者資訊也是很重要的,然而,在後臺儲存使用者資訊通常使用的session和cookie結合的方法,而在前端的實際情況中,跨域產生的ajax是無法攜帶cookie資訊的,
在vue專案中,關於 vue-scroller ,上拉一直載入的問題
關鍵:上拉載入方法方法,都會有一個回撥函式 done,回撥函式的傳引數很關鍵, done(true) 停止載入,會顯示“已無更多資料” done(false) 允許下次繼續 看截圖: 1
spirngMVC在springBoot的web專案中,如何返回檢視?
這是自己昨天幫朋友處理問題遇到的一個問題,由於他使用了springBoot的web專案,檢視模板採用的是thymeleaf。 因為模板解析出錯了,所以我打算不用thymleaf模板(主要我也是有個私心,想驗證自己學過的知識。不過最終還是採用了直接解決問題的方式。),直
談談實際專案中對 資料庫設計 的一些思考
注:本人開發經驗尚淺,下文主要談的是自己的一些想法,不足之處請指出。 最近半年時間都花在管理系統的開放上面,對資料庫的設計有一些自己的想法,在我看來資料庫設計的key point就是妥協。一個設計的比較好的資料庫都是在業務邏輯、設計規約和便於開發這三者之前來回考量,從而獲得
在前後端分離Web專案中,RBAC實現的研究
在前後端分離Web專案中,RBAC實現的研究 最近手頭公司的網站專案終於漸漸走出混沌,走上正軌,任務也輕鬆了一些,終於有時間整理和總結一下之前做的東西。 以往的專案一般使用模板引擎(如ejs)渲染出完整頁面,再發送到瀏覽器展現。但這次專案的處理方式不同,整個專案由前端
記一次大坑:SpringBoot+Mybatis專案中,配置檔案中的修改了SQL語句後不生效
問題:原是SSM框架專案,轉移到SpringBoot+Mybatis,使用的是C3P0連線資料庫。轉移到SpringBoot後的專案,我修改了xml配置檔案中的查詢sql語句,也就是增加了一個查詢欄位,無論是在前端頁面測試,還是使用單元測試時候,我修改後的SQL就是不生效,查
springboot專案中,如何將實體轉為json格式字串返回
繼續WebMvcConfigurerAdapter類,重寫configureMessageConverters方法import java.nio.charset.Charset; import java.util.List; import org.springframewor
vue專案中,定義並使用 全域性變數,全域性函式
一、定義變數,並全域性使用 原理: 1. 單獨新建一個全域性變數模組檔案,模組中定義一些變數初始狀態,用export default 暴露出去。 2. 在main.js中引入,並通過Vue.prototype掛載到vue例項上面