2016-03-02 15 views
8

Tôi tự hỏi nếu một yêu cầu chung saga làm cho bất kỳ ý nghĩa?Giao diện Redux cho các yêu cầu API có hợp lý không?

Nó sẽ thực hiện hành động REQUEST chứa tất cả các infos như tiêu đề, url, dữ liệu và hợp nhất với tiêu đề và URL cơ sở của nó. Sau đó nó sẽ yêu cầu fetch yêu cầu và sau đó put(REQUEST_SUCCEEDED, json) với tải trọng json trong cửa hàng.

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

Theo tôi được biết điều này sẽ chỉ cho phép một yêu cầu tại một thời điểm, vì vậy thay vì gọi API lấy hoạt động một fork sẽ tốt hơn?

Saga cũng có thể quản lý API access_token khi nó gặp nó trong tiêu đề phản hồi và lưu nó cho tất cả các yêu cầu tiếp theo.

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 
} 

Trả lời

1

Có một số câu hỏi được hỏi tại đây.

  • Có. Generic saga yêu cầu có ý nghĩa với tôi. Một nơi để cung cấp tiêu chuẩn cho tất cả các yêu cầu có ý nghĩa.

  • Ngã ba chắc chắn là cần thiết nhất. Hoặc thay vì sử dụng takeEvery trợ giúp. Điều này là để ngăn chặn thiếu một số yêu cầu trong khi saga đang xử lý fetch. Thời gian chờ mặc định có thể cần thiết để được triển khai cũng như sử dụng race.

  • Tham số actionsrequest sẽ tốt hơn đối tượng so với mảng có khóa là startAction. Một cách khác là đặt tên yêu cầu. Và tạo hậu tố chung cho mỗi hành động (ví dụ: GETSTH_START, GETSTH_SUCCESS, GETSTH_ERROR)

Các vấn đề liên quan