Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redux persist not working with RN 0.73 #1462

Open
OmarBasem opened this issue Dec 27, 2023 · 14 comments
Open

Redux persist not working with RN 0.73 #1462

OmarBasem opened this issue Dec 27, 2023 · 14 comments

Comments

@OmarBasem
Copy link

OmarBasem commented Dec 27, 2023

After upgrading to RN 0.73.1, my app gets stuck on a blank loading screen (PesistGate loading).

Removing PersistGate from the App tree makes it work.

I tried debugging the problem, in the file lib/integration/react.js, this.state.bootstrapped returns false, therefore returns loading.

@eithe
Copy link

eithe commented Jan 16, 2024

Anyone else seeing this with RN 0.73? We are due to upgrade soon so want to know if this is a showstopper. Any news on your side @OmarBasem ?

Edit: And @OmarBasem, did you debug exactly what happens in the handlePersistorState function causing bootstrapped state not being set to true?

handlePersistorState = (): void => {

@OmarBasem
Copy link
Author

@eithe No news from my side.

Edit: And @OmarBasem, did you debug exactly what happens in the handlePersistorState function causing bootstrapped state not being set to true?

Nope, I did not debug exactly what happens. I wasn't in urgent need of 0.73 so I rolled back to 0.72.

If you find anything let me know please.

@Harisene
Copy link

I'm trying to use redux-react in my React native application version 0.72.8. When I try to import PersistGate like below it can't be accessible.

import {PersistGate} from 'redux-persist/integration/react'

I checked the node_modules and found out the integration folder is not even there. Any solution for this?

@samvoults
Copy link

samvoults commented Feb 1, 2024

I copied/pasted my redux implementation from a RN 0.72 project to a new RN 0.73 project and it's not working for me neither although it's working correctly on my RN 0.72 project.

@johnhamlin
Copy link

Same problem here on Expo 50 / React Native 0.73.

@samvoults
Copy link

Does anyone know if this has a chance to be fixed anytime soon?

@johnhamlin
Copy link

johnhamlin commented Feb 2, 2024

I've got a solution that's working for me, which you can install with `npm install @johnhamlin/redux-persist.' (You'll have to update all of your import statements too.)

Long story short(er), the code in this repo was updated to version 6.1 three years ago, but that was never published for whatever reason. The latest on npm is 6.0. patch-package didn't like the version mismatch and broke, so I published a new npm package instead.

The only change I made was to update @types/react to the current version, 18.2.51, from 17.0.16. That fixed a problem where TypeScript was complaining that <PersistGate> wasn't a JSX component. Whether that fixed the problem, or the problem was fixed somewhere else in the code changed from 6.0 to 6.1, I'm not sure, but it's working for me and I'm moving on. I'll make a PR with that change, but no PRs have been approved since 2021.

I've tested my version on Expo SDK 50 / React Native 0.73. It works in development and production builds on my iPhone and in simulators. Hope this helps others!

@samvoults
Copy link

Hi John. By trying your package, I found why my redux-persist wasn't working. It was because I didn't add the right value in the whitelist (lol). After the fix I did, I deleted node modules folder and npm i to be sure it was not using a cache version of your package John and it was still working. Thanks for your time though.

const slicePersistConfig = {
  key: SLICE,
  storage: AsyncStorage,
  version: 1,
  whitelist: ["settings"],` // I changed the value here.
};

Which means redux-persist is apparently working in my project with those versions:

"@react-native-async-storage/async-storage": "1.21.0",
"@react-navigation/native": "^6.1.9",
"@reduxjs/toolkit": "^2.1.0",
"expo": "~50.0.5",
"react": "18.2.0",
"react-native": "0.73.2",
"react-redux": "^9.1.0",
"redux-persist": "^6.0.0"

Here is my implementation in case it could help someone else:

store.js

import { configureStore, combineReducers } from "@reduxjs/toolkit";
import AsyncStorage from "@react-native-async-storage/async-storage";
import {
  persistStore,
  persistReducer,
  FLUSH,
  REHYDRATE,
  PAUSE,
  PERSIST,
  PURGE,
  REGISTER,
} from "redux-persist";

import { sliceReducer } from "./slice";

const slicePersistConfig = {
  key: "slice",
  storage: AsyncStorage,
  version: 1,
  whitelist: ["settings"],
};

const reducers = combineReducers({
  slice: persistReducer(slicePersistConfig, sliceReducer),
});

export const store = configureStore({
  reducer: reducers,
  devTools: process.env.NODE_ENV !== "production",
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
});

export const persistor = persistStore(store);

slice.js

import { createSlice } from "@reduxjs/toolkit";

export const slice = createSlice({
  name: "slice",
  initialState: {
    settings: {
      isFirstLaunch: true,
      selectedTheme: undefined,
    },
  },
  reducers: {
    setSelectedThemeInSlice: (slice, action) => {
      slice.settings.selectedTheme = action.payload;
    },
  },
});

export const { setSelectedThemeInSlice } = slice.actions;

export const sliceReducer = slice.reducer;

@johnhamlin
Copy link

Glad you got it working! I was trying to set this up in a new project, so it wasn't totally clear why it started working when it did 😅

@eithe
Copy link

eithe commented Feb 6, 2024

So to conclude you are also seeing that it's working with RN 0.73 and React 18.x without your 6.1 package @johnhamlin ?

@saneybinfaruk
Copy link

@eithe Yes its working with @react-native-async-storage/async-storage. Just , put the right name on whitelist!

@sahad00
Copy link

sahad00 commented Sep 23, 2024

Hey, guys I am facing my error after I upgrade my react native to latest from 0.64 and react to 18x and all those redux packages
@eithe @johnhamlin @saneybinfaruk @OmarBasem @Harisene

Warning: TypeError: 0, _$$_REQUIRE(_dependencyMap[35(...)elper").getSortedMiniAppsScreens is not a function (it is undefined)

getSortedMiniAppsScreens - action dispatched

these functions were usually working normally earlier , now certain functions were undefined

Note: I am using a monorepo

Looking forward for reply...

@eithe
Copy link

eithe commented Sep 23, 2024

Hey, guys I am facing my error after I upgrade my react native to latest from 0.64 and react to 18x and all those redux packages

I am not sure about your specific issue (getSortedMiniAppsScreens doesn't really look related to this project so you should elaborate a bit on why it has something to do with redux-persist), but I am running redux-persist 6.0 with RN 0.74.5 and React 18.2 currently without any specific patches. Haven't tried 0.75.x yet.

@sergioisidoro
Copy link

Similar issue. Got stuck debugging an issue on Android production build on React native 0.74.

Things were working on local, but got stuck with an empty screen on production build. Turns out that Redux perssist does not work on the first launch, never clearing up the Perssist Gate, and without throwing any error. However, on subsequent launches of the app (eg react native reload and expo reload) the gate seemed to be cleared (and I think the store was rehydrated)

It looks like the library is now abandoned, without any updates in 3 years. There are multiple reports of issues with React native without them being addressed :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants