路由器状态未通过 redux 保留在 React-Native 中

2024-01-26

我有以下内容redux配置在react-native using react-native-router-flux and redux-persist。我想在刷新时检索最后一条当前路由,但是路由堆栈在重新加载时被覆盖。

这是reducers/index.js file

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 }

编辑:这是index.js及其提供者和场景:

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>
    )
  }
}

react-native-router-flux即使与 redux 一起使用,它本身也不会恢复场景。 Redux 仅跟踪状态,因此如果您希望导航状态持续存在,则必须让应用程序在启动时导航到上一个场景。

假设你正在使用 reduxreact-native-router-flux,您所需要做的就是将应用程序的初始组件连接到 redux 以获取状态,然后更改场景以匹配。

因此,在为应用程序加载的初始组件场景中,最后执行类似的操作以访问您的 redux 存储:

const mapStateToProps = (state) => {
  const { nav } = state

  return {
    currentScene: nav.scene.name,
  }
}

INITIAL_COMPONENT = connect(mapStateToProps)(INITIAL_COMPONENT)

然后,在该组件的生命周期方法之一中,您可以像这样重定向:

const { currentScene } = this.props
const initialScene = "Login"

if (currentScene !== initialScene) {
  Actions[currentScene]()
}

您还可以传入导航到最后一个场景时使用的 props,或者在 redux 存储没有持久存在的场景时设置您想要转到的默认场景。我正在开发的应用程序现在可以完美地保持状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

路由器状态未通过 redux 保留在 React-Native 中 的相关文章

随机推荐

  • 如何限制子类修改抽象类中方法的范围?

    如何限制抽象类的实现类将方法的范围从 protected 修改为 public 例如 假设我有一个抽象类 package com rao test public abstract class AbstractTEClass protecte
  • RISC-V 中的旋转位

    嘿 我对 RISC V 还算陌生 我的练习题之一是 将 0x0000000000000123 的值右移 4 位 预期结果为 0x3000000000000012 即所有十六进制数字向右移动一位 而最右边的一位移动到前面 到目前为止 我了解了
  • 可以在 C++ 中缓存虚函数查找吗?

    假设我在抽象基类指针 mypointer gt foo 上有一个虚拟函数调用 foo 当我的应用程序启动时 根据文件的内容 它选择实例化特定的具体类并将 mypointer 分配给该实例 在应用程序的剩余生命周期中 mypointer 将a
  • 如何调用 rake 目标两次

    我通过修改 csproj 文件以包含额外的编译符号 从 sln 生成两组不同的 DLL 文件 我正在使用 rake 构建解决方案 并执行以下构建任务 desc Builds the DPSF sln in Release mode msbu
  • 正则表达式不匹配连字符后的数字

    我有以下内容 1 5 5 tablespoon cream 1 cup heavy cream teaspoon cream 1 tablespoon cream s d 我试图找出原因 不匹配 我在非捕获组中有一个转义的连字符 我尝试过的
  • Android 构建脚本存储库:jcenter VS mavencentral

    上次我使用Android Studio时 它生成了 gradle文件与mavencentral buildscript 存储库 而现在有jcenter 谁能解释一下与此相关的问题 还有其他回购吗 我们什么时候应该切换它们 它们对项目 模块
  • VBA XML DOM 搜索可能并不总是存在的项目

    在解析其他节点的数据时 如何为可能并不总是属于其父节点的节点创建循环 假设您有一个非常大的文件 其中包含其中几个项目 但为了简单起见 我们使用此 XML 请注意 第一个 book id 没有我们想要的节点 因此我们的循环已经失败
  • PySpark 和 MLLib:随机森林预测的类概率

    我正在尝试提取使用 PySpark 训练过的随机森林对象的类概率 但是 我在文档中没有看到它的示例 也不是一种方法RandomForestModel 我怎样才能从a中提取类别概率RandomForestModelPySpark 中的分类器
  • .htaccess 导致重定向

    你好 我在 public html ex 中有 2 个文件夹 主文件夹和子文件夹 在我的 public html 与我的 2 个文件夹相同的级别中 我有一个像这样的 htaccess 文件 RewriteEngine On RewriteC
  • 使用 Junit 进行 Android 单元测试:测试网络/蓝牙资源

    我慢慢地沉迷于单元测试 我正在尝试使用测试驱动开发来开发尽可能多的软件 我正在使用 JUnit 对我的 Android 应用程序进行单元测试 我一直在开发一个使用蓝牙的应用程序 并且很难对其进行单元测试 我有一个活动 它使用蓝牙适配器来获取
  • Jetpack Compose 查找父级宽度/长度

    我想显式检索的值fillMaxSize 假设我有 Box Modifier fillMaxSize background Color Yellow var size Box Modifier size someSize background
  • 在 jquery 移动列表中使用自定义图标

    我找到了有关使用自定义图标的文档jQuery 移动按钮 http jquerymobile com demos 1 0 docs buttons buttons icons html以及如何使用现有图标自定义列表 http jquerymo
  • 模板函数和非模板函数调用顺序

    在Linux中我得到 template max is called 但在Windows下我得到 non template max is called 为什么 在 Linux 中 我使用 gcc 4 5 在 Windows 中我使用 VS20
  • Java JPanel 鼠标侦听器对其组件不起作用

    这个问题的解决办法是什么 我向 JPanel 添加了一个鼠标侦听器 但该面板充满了覆盖 JPanel 整个区域的按钮 示例 伪 代码 Create JPanel Set to GridLayout Add 25 buttons 5x5 gr
  • 将数据发送到 iPhone 中的上一个视图

    将数据发送到 iPhone 中的先前视图有哪些可能的方法 不使用Appdelegate 因为我的视图类有机会被再次实例化 我相信最好的方法是使用NSNotificationCenter班级 基本上 您所做的就是向通知中心注册一个对象 作为观
  • iPhone 急救人员

    我对 iPhone 响应链感到困惑 具体来说 在iPhone事件处理指南中http developer apple com iPhone library documentation iPhone Conceptual iPhoneOSPro
  • 构建:找不到名称 Promise - Visual Studio 2015 w/ MVC6 和 Angular 2

    首先 我已经检查过这些 https github com angular angular issues 7052 https github com angular angular issues 7052 https github com a
  • 对于obj-c中的属性,我们是否需要声明实例变量?

    对于obj c中的属性 我们是否需要声明实例变量 例如 如果我的 h 文件如下所示 interface MyClass NSObject property nonatomic retain NSNumber someId property
  • 如何使用无服务器的 serverless-aws-documentation 插件生成带有标签的 swagger 文档

    我正在使用 serverless aws documentation 插件自动生成 swagger doc 遵循以下位置提供的所有步骤 https github com 9cookies serverless aws documentati
  • 路由器状态未通过 redux 保留在 React-Native 中

    我有以下内容redux配置在react native using react native router flux and redux persist 我想在刷新时检索最后一条当前路由 但是路由堆栈在重新加载时被覆盖 这是reducers