🙈
React
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Введення в React
      • Веб-застосунки
      • Бібліотека React
      • Інструменти
      • Створення і клонування своєї збірки React на базі Create React App
      • Елементи в React
      • JSX
      • Компоненти
      • Рендер за умовою
      • Колекції
    • 2️⃣Стилізація
      • Вбудовані стилі
      • Ванільний CSS
      • CSS модулі
      • Стилізовані компоненти
      • Нормалізація стилів
    • 3️⃣Події та стан
    • 4️⃣Форми
      • Formik
      • Yup валідація форм Formik
    • 5️⃣Життєвий цикл
    • 6️⃣HTTP-запити
    • 7️⃣React-хуки
    • 8️⃣Контекст та рефи
    • 9️⃣Маршрутизація
      • Маршрутизація
      • Компонент <BrowserRouter>
      • Компоненти <Route> та <Routes>
      • Компоненти <Link> та <NavLink>
      • URL-параметри
      • Вкладені маршрути
      • Індексні маршрути
      • Програмна навігація
      • Рядок запиту
      • Обʼєкт місцезнаходження
      • Розподілення коду
    • 🔟Redux Toolkit
      • Управління станом
    • 🕚Асинхронний Redux
    • Бібліотека Redux Persist для роботи з localstorage
    • Помилка non-serializable value і її виправлення
    • переключення теми
    • 👷Практика
  • Про мене
    • Про мене
Powered by GitBook
On this page
  1. Теорія

Помилка non-serializable value і її виправлення

PreviousБібліотека Redux Persist для роботи з localstorageNextпереключення теми

Last updated 1 year ago

Під час роботи з persistor може зʼявитися помилка про значення, яке не серіалізується. Приблизно така:

A non-serializable value was detected in an action, in the path: `register`. Value: ƒ register(key) {
    _pStore.dispatch({
      type: _constants__WEBPACK_IMPORTED_MODULE_0__.REGISTER,
      key: key
    });
  } 

Щоб не бачити цю помилку потрібно дозволити додатку ігнорувати деякі типи actions. Для цього потрібно використати прошарок функціоналу middleware і прописати ігнорування помилок перш ніж оновлювати стейт.

  1. Імпортуємо ті компоненти, тип яких будемо ігнорувати

store.js
import {
  persistStore,
  persistReducer,
  FLUSH,
  REHYDRATE,
  PAUSE,
  PERSIST,
  PURGE,
  REGISTER,
} from 'redux-persist'
  1. У store після редʼюсерів прописуємо middleware за прикладом нижче

export const store = configureStore({
  reducer: {
    value: persistedValueReducer,
  },
  middleware: getDefaultMiddleware => [
    ...getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
  ],
});

Після цього помилка в консолі зникне.

Посилання:

Це виникає тому, що actions мають бути до моменту, коли вони фактично досягнуть сховища та передадуться редʼюсеру. І тип actions має бути рядком.

📚
серіалізованими
Чому action має бути рядком
Виправлення помилки не серіалізованих даних
Що таке middleware в Redux