2016-03-02 25 views
8

Mi chiedo se una saga di richieste generiche abbia senso?Una saga di redux per le richieste API ha senso?

Ci vorrebbe un'azione REQUEST che contenga tutte le informazioni come intestazioni, url, dati e si fonderebbe con le proprie intestazioni e l'URL di base. Avrebbe quindi fetch la richiesta e quindi put(REQUEST_SUCCEEDED, json) con il payload json nel negozio.

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}) 
} 

quanto ho capito questo permetterebbe solo una richiesta alla volta, così, invece di chiamare l'API recuperare funzione A fork sarebbe meglio?

La saga potrebbe anche occuparsi della gestione dell'API access_token una volta rilevata nelle intestazioni di risposta e salvarla per tutte le richieste successive.

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 
} 

risposta

1

Qui ci sono diverse domande.

  • Sì. La saga della richiesta generica ha senso per me. Un posto per fornire standard per tutte le richieste ha un senso.

  • La forcella è decisamente necessaria. O meglio usa l'helper takeEvery. Questo per evitare di perdere alcune richieste mentre la saga sta elaborando fetch. Potrebbe essere necessario un timeout predefinito per l'implementazione utilizzando race.

  • Il parametro actions nella funzione request sarebbe meglio essere oggetto di matrice con chiavi di startAction. Un'alternativa è dare un nome alla richiesta. E fai il suffisso generico per ogni azione (ad esempio GETSTH_START, GETSTH_SUCCESS, GETSTH_ERROR)

Problemi correlati