1. 程式人生 > >優購微零售-已上線專案中,完全使用react-native的一些體會

優購微零售-已上線專案中,完全使用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

在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;
  }
2. 跳轉傳參

我們在使用

this.props.navigator.push({
  component: 跳轉到的頁面,
  引數一:引數值
});
發現,這個引數一無法在跳轉的頁面裡面接收。

仔細檢查一下我們的navigator系統,我們發現,在設定navigator的時候,我們使用了:

 <Component {...route.params} navigator={navigator} />

按照網上一些做法,通過他們都是這樣來傳值的:
this.props.navigator.push({
  component: 跳轉頁面,
  params: {
     引數一:引數值
   }
})
在下一個頁面,通過this.props.引數一來獲取。

但是這種方式,在我們這裡始終無法獲取值,真不知道啥原因,求大神指點。

最後我們,在設定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例項上面