I am using redux-persist and redux-persist-transform-filter for persisting some keys in my reducers. In my case, I need to persist only the filters.
This is how I configured my store:
const subscriptionsFilter = createFilter('subscriptions', ['filters']);
const rebillingFilter = createFilter('subscriptionsRebillingStatistics', [
'filters',
]);
const negativeListFilter = createFilter('negativeList', ['filters']);
const disputesFilter = createFilter('disputes', ['filters']);
const merchantAccountsFilter = createFilter('merchantAccounts', ['filters']);
const webhooksFilter = createFilter('webhooks', ['queryParam']);
const processingStatementsFilter = createFilter('processingStatements', [
'filters',
]);
const responseCodeOverviewFilter = createFilter('responseCodeOverview', [
'filters',
]);
const paymentsFilter = createFilter('payments', ['sideFilters']);
const dashboardFilter = createFilter('dashboard', ['filters']);
const customersFilter = createFilter('customers', ['sideFilters']);
const binBlockingFilter = createFilter('binBlocking', ['sideFilters']);
const persistConfig = {
key: 'root',
storage,
whitelist: [
'user',
'dashboard',
'payments',
'subscriptions',
'subscriptionsRebillingStatistics',
'negativeList',
'disputes',
'merchantAccounts',
'webhooks',
'processingStatements',
'responseCodeOverview',
'customers',
'binBlocking',
],
transforms: [
subscriptionsFilter,
rebillingFilter,
negativeListFilter,
disputesFilter,
merchantAccountsFilter,
webhooksFilter,
processingStatementsFilter,
responseCodeOverviewFilter,
paymentsFilter,
dashboardFilter,
customersFilter,
binBlockingFilter,
],
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
const middlewares = [thunkMiddleware];
const middlewareEnhancer = applyMiddleware(...middlewares);
const enhancers = [middlewareEnhancer];
const composedEnhancers = composeWithDevTools(...enhancers);
export const store = createStore(persistedReducer, composedEnhancers);
export const persistor = persistStore(store, {}, () => {
const user = store.getState().user.user;
if (!!user) {
setAccessToken(user);
}
})
;
My app is now crashing because it's trying to read something from undefined states. For example if I want to use something I have to add fallback || {} in my component like this:
const { subscriptionCardInformation, isSubscriptionCardInformationLoading } =
useSelector((state: State) => state.subscriptions);
const {
cardholder_name,
masked_pan,
bin_country,
is_bin_blocking,
is_prepaid,
type,
expiration_month,
expiration_year,
reference,
scheme,
} = subscriptionCardInformation || {};
Is there any better way to do it with redux-persist?