У меня есть приложение для погоды, в котором данные api поступают в разных форматах, поэтому я создал объект методов, которые я могу преобразовать в формат и время от UTC до GMT ,Преобразование данных API в React-Redux: действие или редуцирование
Прямо сейчас у меня есть эти методы, вызываемые данными в моем редукторе.
Вопрос: Является ли это «нормально» или должны быть сделаны преобразования в соответствующем действии до доставки полезной нагрузки в редуктор? Просто любопытно, что лучше всего подходит для чего-то подобного.
FYI: Я использую axios
как мой обещание клиент HTTP на основе и redux-promise-middleware
, redux-lodger
, & redux-promise
как мой промежуточный слой в магазине.
Action Разработчик:
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