Ошибка A non-serializable value was detected in an action возникает из-за того, что Redux Persist пытается сериализовать состояние Redux, которое содержит функции (register и rehydrate) - а они не могут быть сериализованы.
Проблема:
Redux Persist использует localStorage или другой механизм хранения данных для сохранения состояния приложения. Однако localStorage может хранить только строковые значения. Поэтому Redux Persist должен сериализовать объекты и функции в строку перед сохранением в хранилище.
Решение:
Не сериализуйте функции: Функции register и rehydrate в вашем коде, вероятно, не должны быть частью состояния, которое вы сохраняете.
Используйте redux-persist-transform-filter: Если вам действительно нужно сохранить функции, используйте пакет redux-persist-transform-filter для исключения функций из процесса сериализации:
import { persistReducer, persistStore } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import { persistTransform } from 'redux-persist-transform-filter';
// ... ваш код
const persistConfig = {
key: 'root',
storage,
transforms: [
persistTransform(
// Фильтр для исключения функций
(state) => {
const filteredState = { ...state };
delete filteredState.register;
delete filteredState.rehydrate;
return filteredState;
},
// Фильтр для восстановления функций
(state) => {
// Восстановление функций здесь
return state;
}
)
],
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
// ... ваш код
Дополнительные советы:
Просмотрите store.ts: Проверьте, как функции register и rehydrate используются в вашем коде. Возможно, их можно заменить методами, не требующими сериализации.
Используйте console.log: Чтобы проверить, какие именно объекты и функции не сериализуются, добавьте console.log(state) в persistTransform и посмотрите, что выводится в консоли.
Документация redux-persist: Ознакомьтесь с документацией redux-persist для получения более подробной информации о сериализации и использовании redux-persist-transform-filter:
https://github.com/rt2zz/redux-persist Надеюсь, это поможет вам разобраться с ошибкой и найти решение.