2015-11-17 71 views
0

這是使用react-redux時的設計問題。因此,反應應用程序的數據來自服務。我不想對服務URL進行硬編碼,因爲不同的環境(本地,分段和產品)具有不同的URL。我現在正在做的是將URL保存在redux商店中。但它並不正確,因爲商店應該記錄應用程序狀態,並且URL不是狀態的一部分。有沒有一種「減少」的方式來處理這個問題?使用react-redux和ajax調用API - 如何存儲API URL

+0

是不是所有的相對url相同。使用SuperAgent,我不必包含服務器。 –

+0

@yiwen我對這個http://jsfiddle.net/ej2hxz90/的看法 –

回答

0

我使用npm dotenv軟件包解決了這個問題。它從.env文件設置env變量。一旦它在webpack中完成,我只需要將變量傳遞給React.createElement

一旦反應有變量,在商店我使用thunkMiddleWare.withExtraArgument來傳遞url或任何其他設置變量(例如推送實例)。然後他們可以通過一個簡單的動作來訪問,如

return((dispatch, getState, extra) => { 
    extra.api...; 
    extra.pusher.push...; 
} 
1

實際上,現在應該使用哪個API地址還不是關注的問題,除非您必須在運行中切換它們。

因此,從我的角度來看,最簡單的方法是構建不同的構建選項(例如通過webpack全局變量),它將使用選定的API前綴編譯您的代碼。

你說得對,如果有東西不應該在應用程序商店 - 不要存儲在那裏。通過您的構建工具,預編譯或運行時的一些檢測來解決問題 - 但通常,您的redux代碼不應該有任何副作用,只有應用程序狀態和對事件的響應。