tutorial react example reactjs react-native redux react-redux react-native-router-flux

reactjs - example - El estado del enrutador no persiste en react-native con redux



react redux (3)

¿Puedes probar esto? Creo que lo que sucede es el orden de la tienda de crear

const enhancers = compose( applyMiddleware(...middleware), autoRehydrate(), ); // Create the store with the (reducer, initialState, compose) const store = createStore( reducers, {}, enhancers );

O la otra solución debe hacerlo manualmente con import {REHYDRATE} from ''redux-persist/constants'' y llámalo dentro de tu reductor.

Tengo la siguiente configuración de redux en react-native usando react-native-router-flux y redux-persist . Deseo recuperar la última ruta actual al actualizar, sin embargo, la pila de ruta se sobrescribe al volver a cargar.

Este es el archivo reducers/index.js

import { combineReducers, createStore, applyMiddleware, compose } from ''redux'' import { persistStore, autoRehydrate } from ''redux-persist'' import { AsyncStorage } from ''react-native'' import logger from ''redux-logger'' import { startServices } from ''../services'' import navigation from ''./navigation'' import devices from ''./devices'' import rooms from ''./rooms'' import { ActionConst } from ''react-native-router-flux'' function routes (state = {scene: {}}, action = {}) { switch (action.type) { // focus action is dispatched when a new screen comes into focus case ActionConst.FOCUS: return { ...state, scene: action.scene, }; // ...other actions default: return state; } } export const reducers = combineReducers({ routes, navigation, devices, rooms }) const middleware = [logger()] const store = createStore( reducers, compose( autoRehydrate(), applyMiddleware(...middleware) ) ) persistStore(store, {storage: AsyncStorage}, function onStoreRehydrate () { startServices() }) export { store, reducers }

EDITAR: Este es el index.js con su proveedor y escenas:

import React, { Component } from ''react'' import { store } from ''./reducers'' import { Provider, connect } from ''react-redux'' import { Router, Scene, Actions } from ''react-native-router-flux''; import Home from ''./containers/home'' import Login from ''./containers/login'' import Device from ''./containers/device'' const scenes = Actions.create( <Scene key="root"> <Scene key="home" component={Home} /> <Scene key="login" component={Login} /> <Scene key="device" component={Device} /> </Scene> ) const RouterWithRedux = connect()(Router) export default class EntryPoint extends Component { render () { return ( <Provider store={store}> <RouterWithRedux scenes={scenes} /> </Provider> ) } }


Necesitas crear tu store así:

const store = createStore( reducers, compose( applyMiddleware(...middleware), autoRehydrate(), ) );

El autoRehydrate necesita ser parte de tu compose . Verifique este ejemplo de compose .


react-native-router-flux no restaura una escena por sí mismo, incluso cuando se usa con redux. Redux solo realiza un seguimiento del estado, por lo que debe tener su aplicación para navegar a la escena anterior al inicio si desea que su estado de navegación persista.

Asumiendo que tienes redux trabajando con react-native-router-flux , todo lo que tienes que hacer es conectar el componente inicial de tu aplicación a redux para obtener tu estado y luego cambiar tu escena para que coincida.

Por lo tanto, en la escena de componente inicial cargada para su aplicación, haga algo como esto al final para obtener acceso a su tienda redux:

const mapStateToProps = (state) => { const { nav } = state return { currentScene: nav.scene.name, } } INITIAL_COMPONENT = connect(mapStateToProps)(INITIAL_COMPONENT)

Luego, en uno de los métodos del ciclo de vida de ese componente, puede redireccionar de la siguiente manera:

const { currentScene } = this.props const initialScene = "Login" if (currentScene !== initialScene) { Actions[currentScene]() }

También puede pasar los accesorios que se usaron al navegar a la última escena o establecer una escena predeterminada a la que desea ir si el almacén de redux no tiene una escena que persista. La aplicación en la que estoy trabajando ahora es de estado persistente.