【问题标题】:React native: Always running componentReact Native:始终运行的组件
【发布时间】:2023-03-29 12:50:02
【问题描述】:

其实我也不知道,这个问题怎么命名!

我有一个 React Native 中的 JS 文件,它从服务器获取数据并将其与本地数据库进行比较。我需要它同时运行,我该如何实现?当应用程序启动时,它应该运行,更改视图(导航到其他组件)不应该破坏它,它应该仍然在运行。

有什么解决办法吗?

【问题讨论】:

    标签: javascript reactjs react-native react-router


    【解决方案1】:

    您正在解释一种名为:Singleton 的设计模式。

    这是怎么做的:

    let instance = null;
    
    class Singleton{  
        constructor() {
            if(!instance){
                  instance = this;
            }
    
            // to test whether we have singleton or not
            this.time = new Date()
    
            return instance;
          }
    }
    

    测试单例 在上面的类中,我们定义了一个时间属性来确保我们的单例正常工作。

     let singleton = new Singleton()
     console.log(singleton.time);
    
     setTimeout(function(){
       let singleton = new Singleton();
       console.log(singleton.time);
     },4000);
    

    如果它为两个实例打印相同的时间,这意味着我们有一个工作单例。

    现在,您可以在单例中异步加载服务器数据,然后做任何您想做的事情。每当您尝试访问单例类时,它将是同一个实例,并且不会被多次实例化。换句话说,它不会被销毁。

    来源:http://amanvirk.me/singleton-classes-in-es6/

    【讨论】:

    • 老实说,我没有明白你的意思。我找到了 github.com/devfd/react-native-workers ,不确定它是否是我要找的。顺便说一句,谢谢你的回答。
    • 据我了解,您希望拥有一个类的单个实例,并且希望该实例在应用程序的整个生命周期中保持活动状态。这个东西叫做单例。无论您如何重新实例化它,此类中的任何属性都将是持久的。在您的情况下,您将在单例类中异步加载服务器数据,并且它将一直存在。
    • @Ataomega BTW,工作人员用于 CPU 密集型的后台任务。 Worker 在与主应用程序不同的线程中运行,因此它不会锁定应用程序。我认为这不是正确的解决方案,但它可以工作。
    • 感谢您的回答!明白了。
    【解决方案2】:

    我迟到了,但这可能对其他人有帮助,

    一种选择是创建一个单例类。 但另一种选择是为您的导航文件创建一个容器。 > 导航容器只是一个以子为主的普通组件 导航器组件。

    您在导航容器中的代码一直在运行。

    我使用这样的导航容器..

         export default function App() {
            return (
                <Provider store={store}>
                        <NavigationContainer />
                </Provider>
               );
             }
    

    我从这个导航容器返回导航器组件,例如 > this

        return (
     <AuthNavigator ref={navRef} />
        );
    

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 2019-06-30
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2016-10-09
      • 2020-04-11
      • 1970-01-01
      相关资源
      最近更新 更多