路由器状态未通过 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 中 的相关文章

  • 如何正确使用react-router-dom中的useHistory()?

    如何使用useHistory 正确吗 我无法从一个反应组件过渡到另一个反应组件 根据 React 文档以及 Stack Overflow 上的说明 我无法从 App js 转换到 MyComponent js 例如 我正在尝试 App js
  • React 设置背景颜色与状态 rgb

    所以我根据数据库的结果生成一个表 在数据库中我保留 rgb 值 例如 75 75 75 现在当我生成列表时 我想使用保存的值设置我的 td 的背景 tbody this state boxes map box i gt tr td box
  • 浸入草稿,计算属性

    我不确定为什么我会得到Error Immer drafts cannot have computed properties在我的减速器代码中 我在用着redux starter kit它用 Immer 库包装了我的所有减速器代码 我不太确定
  • 由于 apollo-client 未定义,无法解构 GraphQL 查询?

    我正在寻找调试与错误消息相关的问题 未捕获的类型错误 无法解构 0 apollo client WEBPACK IMPORTED MODULE 4 useQuery 因为它未定义 Context 我正在为我的 React js 项目设置后端
  • 找不到处理意图 com.instagram.share.ADD_TO_STORY 的活动

    在我们的 React Native 应用程序中 我们试图让用户根据视图 组件中的选择直接将特定图像共享到提要或故事 当我们尝试直接使用 com instagram share ADD TO FEED 进行共享时 它以一致的方式完美运行 但是
  • 在 ReactJS 中创建动态目录

    我有一个组件 它代表一个页面 其中有多个SectionHeader 组件作为该页面的子组件 我想通过检查 Page 的子项 SectionHeaders 来动态创建目录
  • 如何上传 React Native 的 Firebase Crashlytics 映射文件?

    我在用rnfirebase io https rnfirebase ioFirebase Crashlytics 堆栈跟踪是模糊的 如何上传映射文件来查看原始源代码 是否有 API 或 SDK 支持 None
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points
  • 如何将 SPA 嵌入 ASP.NET Core 库并从路径提供服务

    Szenario 我想构建一个 aspnetcore 库 模块includes一个小的SPA前端 IE html js css 文件应与 dll 一起提供 SPA 应从特定路径提供服务 即 some module does not需要可配置
  • IE 中未定义“代理”

    我通过 React Node 构建了一个 Excel 插件Umi https umijs org 我们已经实施了我们的身份验证系统 身份验证在 Chrome 和 Safari 中有效 我刚刚意识到它在 IE11 中不能很好地工作 F12表明
  • React-native iOS 不显示图像(pod 问题)

    我正在我的react native应用程序中安装一个包 具体来说 它是来自react navigation的createMaterialTopTabNavigator 但安装成功后 出现崩溃 错误 react navigation mate
  • ESLint Airbnb ES6 和 Redux 异步操作围绕箭头主体的意外块语句

    我究竟做错了什么 我有其他三个异步操作也有同样的问题并且无法修复它 当你看一眼箭头函数文档 https developer mozilla org en docs Web JavaScript Reference Functions Arr
  • 如何从CDN注入外部JS到Jest单元测试?

    我有 npm 和 webpack 的反应应用程序 我正在尝试向其添加单元测试 我使用的是包含在我的index html 中的CDN 的jQuery 而不是使用节点模块 我在组件中使用 jQueryTest1我向其中添加了单元测试用例 现在
  • 具有多种布局的 React Router v4

    我想在我的公共布局中渲染一些路线 并在我的私人布局中渲染一些其他路线 有没有一种干净的方法可以做到这一点 显然不起作用的示例 但我希望大致解释我正在寻找的内容
  • React:在哪里扩展对象原型

    我使用创建了一个纯 React 应用程序创建反应应用程序 https github com facebookincubator create react app 我想延长String类并在一个或多个组件中使用它 例如 String prot
  • React:设置 State 或设置 Prop 而无需重新渲染

    Problem 目前 我有一个LoginForm具有 成功 处理函数的组件handleOnSuccess 然后将其链接到父组件onTokenUpdate由 令牌更新 处理函数定义的属性handleUpdateToken 问题是setStat
  • 嵌套对象的 setState

    我有一个嵌套对象作为状态 并且在组件中有一个表单 我正在考虑每次用户在表单中输入某些内容时更新状态 并且为了避免为每个输入创建许多函数 我正在考虑使用 switch 创建单个函数 使用 switch 创建单一函数是个好主意吗 如何更新对象的
  • Typescript 和 React:在组件之间传递 props 与默认 props

    我对 Typescript 和使用 Typescript 创建 React 应用程序相当陌生 我在将道具从一个组件传递到另一个组件时遇到了一些麻烦 我在下面提供了一个示例 我的问题是围绕组件的默认道具 当我在父组件中调用子组件时 出现错误
  • AWS-amplify 在请求中包含 cognito Authorization 标头

    我创建了一个 AWS 移动中心项目 包括 Cognito 和云逻辑 在我的 API 网关中 我为授权者设置了 Cognito 用户池 我使用 React Native 作为我的客户端应用程序 如何将授权标头添加到我的 API 请求中 con
  • React router.push 和 router.replace 之间的区别?

    有什么区别React 路由器推送 and 路由器 替换 路由器历史记录就像一个stack of routes 当您使用router replace 您将覆盖堆栈的顶部 当使用router push 它在顶部添加了一条新路线stack 路由器

随机推荐

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

    如何限制抽象类的实现类将方法的范围从 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