2017-06-05 84 views
0

我有一個SPA應用程序內置React與API的許多axios調用。當錯誤狀態返回401時,我可以設置重定向到axios中的登錄頁面,但是有大量的調用分佈在很多組件中,是否有更好的方式來處理這個問題而不需要重複:更好的反應應用程序範圍內的axios請求處理返回錯誤狀態401

if (error.status === 401) { 
    //redirect to login page 
} 

在每一個請求

+1

聽起來像是攔截一項偉大的工作! https://www.npmjs.com/package/axios#interceptors您可以定義所有請求/響應將通過的函數。使用axios時推薦的全局錯誤處理方式。 –

回答

4

避免寫在所有組件的API調用,創建一個單獨的文件api.js或一些abc.js,寫撥打電話的一般方法,並調用不同組件,方法與合適的參數。在這種情況下,您需要處理每個文件中的所有類型的案例,只需將邏輯放在api.js文件中的一個位置即可。

api.js:

export function _callAPI(url, method, data, target){ 
    /* 
     url: separate url for different component 
     method: Get or Post or Put etc 
     data: if required to pass 
     target: callback method 
    */ 
} 

然後在不同的組件導入此:

import * as Api from 'path to api.js file'; 

調用方式:

Api._callAPI(url, method, data, (data) => { 
    console.log(data); 
}) 
+0

我遇到的最大問題是API調用的性質可以從1到4次調用某些組件(例如搜索結果+下拉過濾器(使用db數據自動完成))。是否有任何重大的速度損失有一系列的電話,而不是與axios.all平行? 現在我的架構有容器組件加載api數據,然後將這些數據作爲道具發送給它的子組件。它工作的很好,但有很多不同的需求, – mikeg542

+0

這裏也可以進行並行調用,在這個_callAPI方法中寫入axios調用並多次調用該方法,每次調用都是異步調用,並且它本質上並行不會同步檢查瀏覽器網絡部分你會看到所有的並行讀取數據) –