2016-03-02 25 views
8

Genel bir istek efsanesinin bir anlamı var mı acaba?API istekleri için redux destan mantıklı mı?

Başlıklann, url, veri gibi tüm Infos içerir ve kendi başlıkları ve temel URL ile birleştirmeyi öngören bir REQUEST harekete alacaktı. Daha sonra fetch istek ve daha sonra put(REQUEST_SUCCEEDED, json) mağazada json yükü ile olur.

const request = yield take(REQUEST) 
const { url, data, headers } = request 
try { 
    if (request.startAction) { 
    yield put(request.startAction) 
    } 
    const json = yield call(api.fetch, url, data, headers) 
    yield put({...request.successAction, json}) 
} catch (error) { 
    yield put({...request.errorAction, error}) 
} 
Ben sadece bir defada bir istek sağlayacak it Bunu anlamak gibi

, bunun yerine API fork iyi olurdu işlev getirmesi çağırmak? Açıklama, aynı zamanda, API access_token API'sini, yanıt başlıklarında karşılaştırarak ve sonraki tüm istekler için kaydettikten sonra yönetme ile ilgilenebilir.

function getAction(action) { 
    if (action) { 
    if (typeof action === "string") { 
     return { type: action } 
    } else { 
     return action 
    } 
    } 
} 

export function request(url, data, headers, actions) { 
    let result = { 
    type: REQUEST, 
    url, data, headers 
    } 
    actions[0] && result.startAction = getAction(actions[0]) 
    actions[1] && result.successAction = getAction(actions[1]) 
    actions[2] && result.errorAction = getAction(actions[2]) 
    return result 
} 

cevap

1

Burada birkaç soru sorulmuştur.

  • Evet. Genel istek destanı bana mantıklı geliyor. Tüm talepler için standart sağlayacak bir yer mantıklı.

  • Çatal kesinlikle gereklidir. Ya da takeEvery yardımcısını kullanın. Bu destan fetch işlerken bazı isteği eksik önlemektir. race kullanılarak da uygulanacak varsayılan bir zaman aşımı gerekebilir.

  • request fonksiyonunda actions parametre startAction tuşları ile dizisinden daha nesne olması daha iyi olur. Bir alternatif, istekte bulunmaktır. Ve her bir eylem için genel sonek (örn. GETSTH_START, GETSTH_SUCCESS, GETSTH_ERROR)

İlgili konular