我有一個天氣應用程序,api數據以不同的格式顯示,所以我組成了一個方法對象,我可以將該數據轉換爲英制格式,時間從UTC到GMT 。在React-Redux中轉換API數據:Action或Reducer
現在我有我的減速器中的數據調用這些方法。
問題:這是「好嗎」還是應該在將有效載荷傳遞給減速器之前的相應操作中完成轉換?只是好奇這是什麼樣的最佳做法。
FYI:我使用axios
作爲我的諾言基於HTTP客戶端和redux-promise-middleware
,redux-lodger
,& redux-promise
因爲我在店裏中間件。
行動者:
export const fetchCurrentWeather = (city) => {
const url = `${CURRENT_ROOT_URL}&q=${city},us`;
const promise = new Promise((resolve, reject) => {
axios.get(url)
.then(res => resolve(res.data))
.catch(err => reject(err));
});
return {
type: FETCH_CURRENT_WEATHER,
payload: promise
};
};
減速機:
export default(state = initialState, action) => {
const data = action.payload;
switch (action.type) {
case `${FETCH_CURRENT_WEATHER}_PENDING`:
return {};
case `${FETCH_CURRENT_WEATHER}_FULFILLED`:
const prefix = 'wi wi-owm-';
const code = data.weather[0].id;
const icon = prefix + code;
return {
...state,
weatherData: {
humidity: data.main.humidity,
icon,
name: data.name,
pressure: unitConverter.toInchesHG(data.main.pressure),
sunrise: unitConverter.toGMT(data.sys.sunrise),
sunset: unitConverter.toGMT(data.sys.sunset),
temp: unitConverter.toFarenheit(data.main.temp),
winddir: unitConverter.toCardinal(data.wind.deg),
windspd: unitConverter.toMPH(data.wind.speed)
},
isFetched: true
};
case `${FETCH_CURRENT_WEATHER}_REJECTED`:
return {
...state,
isFetched: true,
err: data
};
default:
return state;
}
};
謝謝!我正在考慮將轉換轉換爲動作,因爲它看起來像我仍然在執行數據上的「動作」,而減速器並不真的假設要這樣做。我會檢查'reselect'包。再次感謝! – rockchalkwushock