React-Redux, React Native, AsyncStorage для постоянного входа в систему

#react-native #expo #asyncstorage #react-redux-form

#реагировать-родной #Экспо #asyncstorage #react-redux-форма

Вопрос:

Я создаю приложение.

Я использую React Native и Expo в сочетании с Redux и Expo AsyncStorage , чтобы сохранить пользователя в Redux, поэтому ему нужно войти только один раз.

Моя идея состоит в том, чтобы создать ReduxProvider метод, который использует Redux createStore для сохранения и загрузки данных AsyncStorage .

Когда я обновляю приложение в симуляторе с помощью expo-cli, я вижу в загрузчике, что загружаю пользователя, а затем снова вызывается persister и устанавливает состояние в undefined

Для этого я использую createStore in Redux для вызова сохранителя и загрузчика, чтобы установить и получить AsyncStorage состояние.

Ниже приведен мой код:

 export const storeCreator = async (  persister: StatePersister,  loader: StateLoader,  modules: Module[] = defaultModules,  customModules: CustomModule[] = [] ): Promiselt;RootStoregt; =gt; {  const {store} = await createStore(persister, loader, modules, customModules)   return store }  

Затем у меня есть мое ReduxProvider ниже:

 import {Provider} from "react-redux"; import React, {useState, useEffect} from "react"; import {View, Text} from "react-native"; import {RootStore} from "./types"; import {storeCreator} from "./index"; import AsyncStorage from '@react-native-async-storage/async-storage';  export const ReduxProvider: React.FC = (props) =gt; {  const [store, setStore] = useStatelt;RootStore|undefinedgt;()   useEffect(() =gt; {  storeCreator(  async (state) =gt; {  await AsyncStorage.setItem('state', JSON.stringify(state))  },  async () =gt; {  const state = await AsyncStorage.getItem('state')  return state ? JSON.parse(state) : undefined  }  ).then(store =gt; {  setStore(store)  })  }, [])   if (!store) {  return lt;Viewgt;lt;Textgt;Loadinglt;/Textgt;lt;/Viewgt;  }   return lt;Provider store={store}gt;{props.children}lt;/Providergt; }  

Который используется в моем приложении.tsx для переноса основных приложений AppContainer

 lt;ReduxProvidergt;  lt;RouterContainer/gt; lt;/ReduxProvidergt;  

Это мой первый раз, когда я использую Redux, поэтому спросите меня, не пропустил ли я что-нибудь.

Спасибо.