Недавно я начал изучать reselect
и попытался использовать его в своем проекте.reselect, Где я могу вычислить логику вычислений?
Но, я сомневаюсь, где я должен поместить код, который вычисляет выводимые данные.
Ниже мой фрагмент кода, я думаю, что я поставил formatDate
calcDayLeftFromNow
setDeriveData
логики к моей reducer
также будет хорошо.
Я получаю данные, вычисляемые в моем reducer
также будут в порядке.
Если я это сделаю, кажется, нет причин использовать reselect
.
Спасибо за ваш ответ!
function formatDate(millisecond) {
let d = new Date(millisecond)
let dateArr = [d.getFullYear(), d.getMonth() + 1, d.getDate()];
let date = dateArr.join('.');
return date;
}
function calcDayLeftFromNow(endTimeNum) {
const timeDiff = endTimeNum - new Date().getTime();
const daysDiff = Math.ceil(timeDiff/(1000 * 3600 * 24));
return daysDiff;
}
function setDeriveData(coupons) {
return Object.values(coupons).map((coupon, index) => {
coupon.startDate = formatDate(coupon.startTimeNum);
coupon.endDate = formatDate(coupon.endTimeNum);
coupon.dayLeft = calcDayLeftFromNow(coupon.endTimeNum);
return coupon;
});
}
const mapStateToProps = (state) => {
const {coupons, current_tab, result, page} = state.yao_coupon;
const newCoupons = setDeriveData(coupons);
return {
coupons: newCoupons,
current_tab,
result,
page
};
};
Другая причина переместить его в отдельный файл в том случае, если вам нужен тот же самый селектор во всех частях приложения. Например, если вам нужен зарегистрированный пользователь и его параметры, которые могут быть разбросаны по всему состоянию, вы можете использовать один селектор для вычисления объекта, который будет использоваться последовательно для пользователя во всех компонентах приложения. – kwelch
@Abdellah Alaoui Спасибо. Но я сомневаюсь, почему я не вычисляю производные данные при получении данных с сервера.Поэтому вам не нужно вычислять каждый раз в mapStateToProps. 'initState = {bookList: [], производнаяPrice: 0}' когда я беру данные bookList с сервера, я вычисляю 'производнуюPrice' в моем редукторе FETCH_SUCCESS'. – novaline