React-Native配合ignite 開發(fā)文檔

React-Native配合ignite開發(fā)文檔

1.部署調(diào)試

1)Nuclide的start package有時(shí)候有問(wèn)題蜂大,手機(jī)顯示奇怪的錯(cuò)誤,可以在命令行

npm start -- --reset-cache

重置后窄绒,啟動(dòng)正常。

2)安裝程序到真機(jī)岩喷,如果命令行不行,androidstudio里安裝。

3)真機(jī)調(diào)試,彈出菜單虏劲,晃動(dòng)手機(jī)出,如果不出褒颈,手機(jī)設(shè)置->程序->本程序->允許懸浮框柒巫。

模擬器,ctrl+m谷丸,調(diào)出調(diào)試菜單堡掏。


4)Nuclide菜單選擇start debugging,然后手機(jī)調(diào)試菜單選擇remote debug

然后在程序中打斷點(diǎn),單步執(zhí)行刨疼,可以看出程序的流轉(zhuǎn)路徑泉唁。

Redux的程序有點(diǎn)類似QT和win32的消息泵,每個(gè)地方跳轉(zhuǎn)不靠函數(shù)調(diào)用揩慕,全是異步消息亭畜,異步調(diào)用,聲明消息的地方比較特殊Action迎卤,處理消息的地方也比較特殊贱案,下面咱們著重過(guò)一下。

5)初步調(diào)試的時(shí)候止吐,要解決程序編碼問(wèn)題宝踪,主要是多個(gè)逗號(hào),函數(shù)名大小不一致碍扔,沒有定義這些瘩燥,因?yàn)閖s不需要編譯,這些還只能運(yùn)行時(shí)發(fā)現(xiàn)不同。

優(yōu)先看手機(jī)的錯(cuò)誤提示厉膀,因?yàn)槭謾C(jī)屏幕較小,有時(shí)候外殼程序會(huì)直接崩潰二拐,這時(shí)候可以在終端開npm start服鹅,看這個(gè)輸出。

程序基本能運(yùn)行起來(lái)百新,沒有上面這種簡(jiǎn)單報(bào)錯(cuò)后企软,開始使用調(diào)試器查看程序變量進(jìn)行正常的邏輯調(diào)試。

2.開發(fā)

Ignite匯集了多個(gè)主流開發(fā)庫(kù)饭望,并組裝成自己的框架仗哨。咱們先對(duì)最常用的形庭,從服務(wù)器請(qǐng)求數(shù)據(jù)開始,這個(gè)不同于android的處理厌漂,只需要”后臺(tái)線程+網(wǎng)絡(luò)請(qǐng)求”一步萨醒,React需要使用redux的方式:

構(gòu)建Action -> reducer ->合并reducer -> sagas配置

調(diào)用路徑是,screen里發(fā)起Action苇倡,通過(guò)上面的reducer配置富纸,傳遞到Sagas處理,處理請(qǐng)求后旨椒,put Action回到Redux晓褪,改變state,然后state改變又回到screen里钩乍,對(duì)應(yīng)到prop的改變辞州,最終screen在componentWillReceiveProps收到請(qǐng)求的數(shù)據(jù)。

2.1 API請(qǐng)求

這個(gè)我理解的是:

1)所有同一個(gè)網(wǎng)站的API接口都要寫到一個(gè)Service里

2)然后每個(gè)具體的接口函數(shù)都要封裝成一組Redux+Saga寥粹,然后名字起名要和接口對(duì)應(yīng)变过,這樣可以最少的修改代碼達(dá)到可用狀態(tài)。

我們以儀表系統(tǒng)的請(qǐng)求為例:

假如服務(wù)器端提供2個(gè)接口函數(shù):

1.get_equipment_name_list GET無(wú)參

2.get_equipment_model_list POST參數(shù)是nameId

我們現(xiàn)在開始做第一個(gè)接口涝涤。

1.第一步媚狰,寫Service

import apisauce from 'apisauce'

// our "constructor"

const create = (baseURL ='http://equipment.jimglobal.com/api/') => {

// ------

// STEP 1

// ------

//

// Create and configure an apisauce-based api object.

//

const api = apisauce.create({

// base URL is read from the "constructor"

baseURL,

// here are some default headers

headers: {

'Cache-Control': 'no-cache'

},

// 10 second timeout...

timeout: 10000

})

const login=(username,password) => api.post('login',{username :username,password:password})

const get_equipment_name_list=() => api.get('get_equipment_name_list')

const get_equipment_model_list=(nameId) => api.post('get_equipment_model_list', {nameId:nameId})

return {

login,

get_equipment_name_list,

get_equipment_model_list

}

}

// let's return back our create method as the default.

export default {

create

}

要點(diǎn):1) baseURL寫服務(wù)器地址

2)綠色的部分,注意get, post,和參數(shù)的處理阔拳。

3)紅色的部分崭孤,對(duì)外提供的接口。

這個(gè)怎么上傳文件我還沒試糊肠。這個(gè)一般都不會(huì)寫錯(cuò)辨宠。

2.第二步,寫redux

對(duì)于get_equipment_name_list和get_equipment_model_list货裹,我們要提供獨(dú)立的redux嗤形。

比如我們第一個(gè)接口我們叫GetEquipmentNameList,我們就可以做下面

使用ignite generate redux GetEquipmentNameList

生成的代碼:

我們不需要參數(shù)弧圆,所以可以把data去掉赋兵,改為:

const { Types, Creators } = createActions({

getEquipmentNameListRequest: null,

getEquipmentNameListSuccess: ['payload'],

getEquipmentNameListFailure: null

})

INITIAL_STATE中也不需要data,所以可以去掉

export const INITIAL_STATE = Immutable({

fetching: null,

payload: null,

error: null

})

Request自然也不需要data搔预,去掉

// request the data from an api

export const request = (state) =>

state.merge({ fetching: true, payload: null })

然后這個(gè)文件就改好了霹期,可以看到我們只需要調(diào)整參數(shù)部分,拯田,和state部分历造,其他的用默認(rèn)的就可以。

但是具體原理也要明白:

createActions中的getEquipmentNameListRequest被自動(dòng)轉(zhuǎn)化為GET_EQUIPMENT_NAME_LIST_REQUEST, 最后createReducer和處理函數(shù)關(guān)聯(lián)起來(lái),處理函數(shù)更新state帕膜。

3.第三步枣氧,寫saga

Saga是真實(shí)發(fā)起api請(qǐng)求的地方溢十。

默認(rèn)生成的代碼

我們注意到getGet#,生成器會(huì)添加get垮刹,所以咱們的命名還是不要GET這種動(dòng)詞比較好。除了默認(rèn)的data參數(shù)张弛,其他都是好的荒典,所以命令很重要,配套的Redux和Sagas命令一定要一樣吞鸭。我們把a(bǔ)ction和data去掉寺董,這個(gè)就完了。

export function * getGetEquipmentNameList (api) {

// make the call to the api

const response = yield call(api.getgetEquipmentNameList)

4.第四步刻剥,連接

連接要分兩個(gè)地方遮咖,redux和saga要分別做連接

打開Redux/index.js文件:

EquipmentNameList : require('./GetEquipmentNameListRedux').reducer

這一行是我們要添加的,注意這個(gè)EquipmentNameList造虏,這個(gè)不是胡亂起的御吞,在screen中的mapStateToProps中的state是全局的,EquipmentNameList就是我們這個(gè)redux的數(shù)據(jù)漓藕。

打開Sagas/index.js文件陶珠,跟著注釋家,導(dǎo)入types享钞,導(dǎo)入saga的函數(shù)

/* ------------- Types ------------- */

import { GetEquipmentNameListTypes } from '../Redux/GetEquipmentNameListRedux'

/* ------------- Sagas ------------- */

import { getGetEquipmentNameList} from './GetEquipmentNameListSagas'

如果api是新的揍诽,就要搞一個(gè)實(shí)例

const appApi=AppApi.create()

然后連入root

takeLatest(GetEquipmentNameListTypes.GET_EQUIPMENT_NAME_LIST_REQUEST, getGetEquipmentNameList, appApi),

連接就做完了。

按步驟做栗竖,1分鐘左右就能完成一套暑脆。

5.第五步,Screen里使用

現(xiàn)在我們?cè)贚oginScreen里加入對(duì)這個(gè)接口的調(diào)用狐肢。

先導(dǎo)入Action

import GetEquipmentNameListActions from '../Redux/GetEquipmentNameListRedux'

然后處理mapStateToProps添吗,把數(shù)據(jù)合并到state去。

const mapStateToProps = (state) => {

return {

fetching: state.login.fetching,

response: state.login.response,

error: state.login.error,

equipmentname_payload : state.EquipmentNameList.payload

}

}

然后處理mapDispatchToProps处坪,把Action封裝成自己的props“getEquipmentNameList”根资, 這樣自己的函數(shù)中就可以直接調(diào)用了。

const mapDispatchToProps = (dispatch) => {

return {

attemptLogin: (username, password) => dispatch(LoginActions.loginRequest(username, password)),

getEquipmentNameList:() => dispatch(GetEquipmentNameListActions.getEquipmentNameListRequest())

}

}

調(diào)用:隨便什么地方同窘,只要調(diào)用玄帕,就會(huì)發(fā)起請(qǐng)求。

//在這個(gè)地方做EquipmentName

this.props.getEquipmentNameList();

最后想邦,接收請(qǐng)求裤纹,這個(gè)equipmentname_payload就是mapStateToProps最下面那行的那個(gè),下面自己想怎么做就怎么做了。

componentWillReceiveProps (newProps) {

// this.forceUpdate()

// Did the login attempt complete?

if(newProps.equipmentname_payload)

{

}

作者:MackJson

鏈接:http://www.reibang.com/p/efc9a00b843a

來(lái)源:簡(jiǎn)書

著作權(quán)歸作者所有鹰椒。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)锡移,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漆际,一起剝皮案震驚了整個(gè)濱河市淆珊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奸汇,老刑警劉巖施符,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異擂找,居然都是意外死亡戳吝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門贯涎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)听哭,“玉大人,你說(shuō)我怎么就攤上這事塘雳÷脚蹋” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵粉捻,是天一觀的道長(zhǎng)礁遣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肩刃,這世上最難降的妖魔是什么祟霍? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮盈包,結(jié)果婚禮上沸呐,老公的妹妹穿的比我還像新娘。我一直安慰自己呢燥,他們只是感情好崭添,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叛氨,像睡著了一般呼渣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寞埠,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天屁置,我揣著相機(jī)與錄音,去河邊找鬼仁连。 笑死蓝角,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播使鹅,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼揪阶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了患朱?” 一聲冷哼從身側(cè)響起鲁僚,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麦乞,沒想到半個(gè)月后蕴茴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劝评,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姐直,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒋畜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声畏。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姻成,靈堂內(nèi)的尸體忽然破棺而出插龄,到底是詐尸還是另有隱情,我是刑警寧澤科展,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布均牢,位于F島的核電站,受9級(jí)特大地震影響才睹,放射性物質(zhì)發(fā)生泄漏徘跪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一琅攘、第九天 我趴在偏房一處隱蔽的房頂上張望垮庐。 院中可真熱鬧,春花似錦坞琴、人聲如沸哨查。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寒亥。三九已至,卻和暖如春荧关,著一層夾襖步出監(jiān)牢的瞬間溉奕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工羞酗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腐宋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胸竞,于是被迫代替她去往敵國(guó)和親欺嗤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容