DevSettings.reload() 用于在 React Native 中注销

Posted

技术标签:

【中文标题】DevSettings.reload() 用于在 React Native 中注销【英文标题】:DevSettings.reload() for logout in React Native 【发布时间】:2020-08-07 02:17:27 【问题描述】:

问题

我正在将我的混合应用程序的注销功能从原生迁移到反应原生。

要求:

它适用于生产环境和设备 它导航到应用程序的根屏幕(登录屏幕) 它清除了 redux 存储 [很高兴]它取消了任何正在进行的请求

最初,我们计划这样做:how-to-reset-the-state-of-a-redux-store

理念

从 React Native 0.62.0 开始,我们现在可以访问 DevSettings 模块。 DevSettings 有一个原生桥,可以reload react-native 环境。但是 DevSettings 真的只适用于开发环境吗?

导出 DevSettings 模块,添加 addMenuItem 方法(cc068b0551 by @janicduplessis)

问题

    使用重新加载与使用 redux 操作注销的权衡是什么? 我应该在生产应用中使用重新加载吗?

编辑:答案

    产品不允许重新加载 (code) react-native-restart 非常适合我的用例。

【问题讨论】:

【参考方案1】:

这是不允许在 prod 中使用 devSettings 的代码行

import NativeDevSettings from '../NativeModules/specs/NativeDevSettings';
import NativeEventEmitter from '../EventEmitter/NativeEventEmitter';

class DevSettings extends NativeEventEmitter 
  ...
  reload(reason: string) 
    if (typeof NativeDevSettings.reloadWithReason === 'function') 
      NativeDevSettings.reloadWithReason(reason || 'Uncategorized from JS');
     else 
      NativeDevSettings.reload();
    
  
  ...


// Avoid including the full `NativeDevSettings` class in prod.
class NoopDevSettings 
  addMenuItem(title: string, handler: () => mixed) 
  reload() 


module.exports = __DEV__ ? new DevSettings() : new NoopDevSettings();

来自Libraries/Utilities/DevSettings

【讨论】:

【参考方案2】:

DevSettings 模块公开了自定义设置的方法 开发人员正在开发中

DevSettings 仅用于开发环境,在发布模式下不起作用。 最好的解决方案是关注您在问题中分享的link

【讨论】:

啊,是的,我在文档中读到过,但文档非常稀疏。为什么只在开发中?它是否强制它只能用于开发? 这只是一种通过用户交互重新加载应用的新方法,但不可能在发布时重新加载应用 你能详细说明一下吗?代码在哪里说不可能?编辑:发现了一些东西github.com/facebook/react-native/blob/…

以上是关于DevSettings.reload() 用于在 React Native 中注销的主要内容,如果未能解决你的问题,请参考以下文章

用于检查值是不是在列表中的逻辑不适用于 set

如何在两个线程中使用队列——一个用于消费者,一个用于生产者

如何使用 2 个数据集,1 个用于训练,1 个用于在 WEKA 上进行情感分析测试

如何在 AndroidManifest 中指定多个活动,一个用于启动屏幕,一个用于 mainactivity - 将原始意图传递给 mainactivy

如何在 C 中设置 SO_RCVTIMEO 选项仅用于读取而不用于接受

在 ruby​​ on rails 动态 id 不能用于两个词,但可以完美地用于一个词——使用引导程序崩溃