redux-persist / createPersistoid: ошибка сериализации состояния TypeError: преобразование круговой структуры в JSON

Я пытаюсь интегрировать redux-persist в свой проект, ориентированный на реакцию. Цель состоит в том, чтобы сохранить данные хранилища redux между перезапусками приложения, чтобы пользователю не приходилось входить в систему каждый раз при запуске приложения. Кроме того, я хочу хранить ранее просмотренные данные в локальном хранилище, чтобы не запрашивать все данные каждый раз при повторном запуске приложения.

Я добавил поддержку сохранения redux в соответствии с приведенным ниже кодом:

import { AsyncStorage } from 'react-native';
import { createStore, applyMiddleware } from 'redux';
//import { createLogger } from 'redux-logger';
import { persistStore, persistReducer } from 'redux-persist';
import rootReducer from '../reducers/index';
import ReduxThunk from 'redux-thunk';
import { createTransform } from 'redux-persist';
import JSOG from 'jsog';

export const JSOGTransform = createTransform(
    (inboundState, key) => JSOG.encode(inboundState),
    (outboundState, key) => JSOG.decode(outboundState),
)

const persistConfig = {
    // Root
    key: 'root',
    // Storage Method (React Native)
    storage: AsyncStorage,
    //transforms: [JSOGTransform]
    // Whitelist (Save Specific Reducers)
    // whitelist: [
    //   'authReducer',
    // ],
    // // Blacklist (Don't Save Specific Reducers)
    // blacklist: [
    //   'counterReducer',
    // ],
};

// Middleware: Redux Persist Persisted Reducer
const persistedReducer = persistReducer(persistConfig, rootReducer);

// Redux: Store
const store = createStore(
    persistedReducer,
    applyMiddleware(ReduxThunk),
);

// Middleware: Redux Persist Persister
let persistor = persistStore(store);
// Exports
export {
  store,
  persistor,
};

Если я не добавляю jsog и использую строку transforms: [JSOGTransform] в persistConfig, я получаю эту ошибку:

redux-persist / createPersistoid: ошибка сериализации состояния TypeError: преобразование круговой структуры в JSON

Если я раскомментирую строку 'transforms' в persistConfig (согласно предложению здесь: https://github.com/rt2zz/redux-persist/issues/735), то я получаю эту ошибку:

Исключение в HostObject :: set: ‹unknown>

Я просто сохраняю возвращенный объект "пользователь" из базы данных firestore в моем redux-store. Без redux-persist проблем не было, но с добавленным persist у меня возникла эта проблема.

Какой тип круговой проблемы будет существовать в объекте пользователя, возвращенном после успешного входа в firestore (с использованием пароля / электронной почты)?

Почему JSOG не работает так, как указано в приведенной выше ссылке? Есть ли альтернативы тому, как я могу решить эту проблему?

P.S. Эти ошибки вызывает не только пользователь, возвращенный из firestore, но и любые данные, возвращаемые из firestore, похоже, не сохраняются.

Я ценю любую помощь! Ваше здоровье...


person honor    schedule 12.09.2019    source источник


Ответы (1)


Думаю решил проблему. Вместо JSOG я установил flatted и использовал его для преобразования redux-persist.

Рабочие transform и persistConfig выглядят так:

export const transformCircular = createTransform(
    (inboundState, key) => Flatted.stringify(inboundState),
    (outboundState, key) => Flatted.parse(outboundState),
)

const persistConfig = {
    key: 'root',
    storage: AsyncStorage,
    stateReconciler: autoMergeLevel2,
    transforms: [transformCircular]
};
person honor    schedule 13.09.2019
comment
Спасибо за это, я закончил использовать JSOG, чтобы исправить это, поскольку по какой-то причине Flatted вызывал много ошибок сборки, связанных с firestore, в моей сборке iOS. Ссылка на проблему Github ниже github.com/rt2zz/redux-persist/issues/735 - person IronWorkshop; 07.01.2020