接口及傳參
因自己一直只會做最簡單的項目曾雕,所以并不清楚從接口讀取數(shù)據(jù)是什么意思见芹,但這個項目必須是要從服務(wù)端讀取數(shù)據(jù)的,所以鸯乃,就跟著同事的demo嘗試了一下鲸阻。this.props...具體的,我還不太會缨睡,還需要繼續(xù)學(xué)習(xí)鸟悴。
JS時間倒計時
這是js里的經(jīng)典部分,而不是RN的專屬奖年,由此也可以看到细诸,JS是基礎(chǔ)呢。如何呈現(xiàn)出陋守,已經(jīng)開播的時間呢震贵?或者說,呈現(xiàn)出過程中的時間水评,又或者說猩系,呈現(xiàn)出還有多少的時間才開始呢?在JS中與在RN中的不同是什么呢中燥?
RN時間倒計時
在JS中寇甸,倒計時的動態(tài)效果,我們是用 setTimeout("show_time()", 1000) 即可褪那,并在else里使用clearTimeout(timerID) 清除定時器 幽纷。但在RN中,我們也需要動態(tài)刷新數(shù)據(jù)博敬。想到RN中文網(wǎng)講state那一部分時友浸,所介紹的 setInterval 方法。在倒計時的呈現(xiàn)中偏窝,時間差是需要動態(tài)的收恢,再具體一點(diǎn)兒,是當(dāng)前時間是動態(tài)的祭往,然后讓當(dāng)前時間與固定時間相減就可以得到倒計時了伦意。這就是說,當(dāng)前時間是需要如此定義的 this.state ={ liveTime : new Date() }硼补。
接下來的問題是驮肉,哪里刷新呢?在 constructor中定義刷新函數(shù)是OK的已骇。如何在頁面渲染完成后呈現(xiàn)的是新的時間呢离钝。于是票编,我第一次使用了 componentDidMount 方法。
RN組件的生命周期的相關(guān)文章比較多慧域,簡單而言就是說,一個組件從它被加載浪读,到最終卸載時會經(jīng)歷一個完整的生命周期:constructor--組件創(chuàng)建時調(diào)用一次昔榴。 componentWillMount--如果需要從本地存儲中讀取數(shù)據(jù)用于顯示,常用該方法碘橘,因為在這個方法中互订,如果通過setState函數(shù)修改狀態(tài)機(jī)變量,RN框架不會額外執(zhí)行渲染蛹屿。 rener--組件渲染屁奏,必須有。componentDidMount--初始化渲染完成后就會馬上被調(diào)用错负。?
于是坟瓢,如下的代碼就可以在界面上顯示當(dāng)前時間啦:
再回歸到倒計時吧,因當(dāng)前時間是用 new Date() 創(chuàng)建犹撒,與另一個日期格式不同折联,因此需要首先規(guī)范下日期格式咯:
假設(shè)從后臺傳遞過來的數(shù)據(jù)是這樣的:“2009-12-02 12:25”,因需要將數(shù)據(jù)改為" 2009/12/02 12:25"识颊,然后再傳遞給 new Date 就可以使時間變?yōu)闀r間戳啦诚镰。var date=new Date();? 以前只是了解 new Date ,后來才知道是可以在其中傳參祥款,來給它一個固定的日期格式的清笨。
if else 還是 switch 呢?
曾經(jīng)都在書本上的知識刃跛,真正用起來時抠艾,才明白優(yōu)化是什么意思?如何使代碼更為簡潔桨昙,效率也更高呢检号?是只考慮 如何實(shí)現(xiàn),還是如何更好的實(shí)現(xiàn)呢蛙酪?作為一名程序員齐苛,給自己的定位又是什么呢?摘錄一篇前輩的文章吧:
switch...case與if...else的根本區(qū)別在于桂塞,switch...case會生成一個跳轉(zhuǎn)表(Binary Tree算法)來指示實(shí)際的case分支的地址凹蜂,而這個跳轉(zhuǎn)表的索引號與switch變量的值是相等的。switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應(yīng)索引號的表項從而到達(dá)定位分支的目的玛痊。switch適用于分支較多的情況呢泥彤。
但說實(shí)話,我對效率并沒有很多的概念卿啡。我還處于從 0 到 1 的階段,期待自己可以從 1 到 2 的階段吧菱父。