#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, поэтому спросите меня, не пропустил ли я что-нибудь.
Спасибо.