#reactjs #redux #react-redux
#reactjs #redux #react-redux
Вопрос:
Я использую moment для некоторых утилит date и сохраняю данные в redux. После заполнения формы и поиска данных в серверной части я получаю эту ошибку, но я получаю ее только при первом поиске:
Error: Invariant failed: A state mutation was detected between dispatches, in the path 'app.departureDate._locale._longDateFormat.ll'. This may cause incorrect behavior.
Это редуктор:
addDepartureDate(state, action) {
return { ...state, departureDate: action.payload };
}
И здесь я использую данные:
const {
flightType,
localeConfig,
departure,
arrival,
departureDate,
arrivalDate,
currency
} = useSelector(state => state.app);
const startDate = departureDate;
И значение изменяется только тогда, когда из реагирующих дат выбирается новая дата, но тогда ошибка не выдается, я получаю ошибку после попытки получить данные из серверной части.
Комментарии:
1. Какой фактический тип данных хранится в этом пути состояния? Это
moment
экземпляр?2. да, это объект moment, но инициализируется как пустая строка
Ответ №1:
moment
Экземпляр является изменяемым и не сериализуемым и, следовательно, не должен храниться в хранилище Redux:
- https://redux.js.org/style-guide/style-guide#do-not-mutate-state
- https://redux.js.org/style-guide/style-guide#reducers-must-not-have-side-effects
Предпочитаю хранить значения даты в хранилище в виде числовых временных меток или строк (например, date.toISOString()
, и т. Д.)