【发布时间】:2017-03-17 19:51:15
【问题描述】:
我有一个天气应用程序,它的 api 数据有不同的格式,所以我创建了一个方法对象,我可以将该数据转换为英制格式,并将时间从 UTC 转换为 GMT。
现在我在 reducer 中的数据上调用了这些方法。
问题:“可以”还是应该在将有效负载传递给减速器之前在相应的操作中完成转换?只是好奇这样的最佳做法是什么。
仅供参考:我使用 axios 作为基于 Promise 的 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;
}
};
【问题讨论】:
标签: reactjs redux react-redux reducers