如何使用多个反应式eventExpr实现eventReactive?

时间:2019-05-03 18:33:17

标签: r shiny

在R中初始化一个闪亮的应用程序时遇到麻烦。我希望eventReactive从反应式表达式所链接的多个事件中的任何一个触发。该应用程序通常可以按预期运行,但不会在初始化时显示,而是要求用户在显示结果之前选择一个actionButton。为什么会这样?

我阅读了eventReactive的文档,并使用ignoreNULL和ignoreInit设置玩过,并且进行了许多在线搜索。

以下示例。

@IBAction func login(_ sender: Any) {
    guard let email = emailInput.text else { return }
    guard let password = passwordInput.text else { return }

    Auth.auth().signIn(withEmail: email, password: password) { user, error in
        if error == nil && user != nil {
            self.readData()
            self.dismiss(animated: false, completion: nil)
        } else {
            print("Error logging in: ", error!.localizedDescription)

            let alert = UIAlertController(title: "Fehler beim Einloggen", message: error!.localizedDescription, preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "Verstanden", style: .default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }
    }
} 

func readData() {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let databaseRef = Database.database().reference()

    databaseRef.child("users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in

        let value = snapshot.value as? NSDictionary
        let monthlyStartKmData = value?["monthlyStartKm"] as? Int ?? 0
        let currentKmData = value?["currentKm"] as? Int ?? 0
        ...


        startKm = monthlyStartKmData
        currentKm = currentKmData
        ...


    }) { (error) in
        print(error.localizedDescription)
    }

}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。也许不是最优雅的,但可以。

问题在于input$modelFilterinput$modelFilterdf2之后的一个更新。用户选择input$update的时间无关紧要,因为df2不会更新,而只是在新创建的df2期间出现问题,因为过滤器无法匹配数据。

为解决此问题,我添加了values <- reactiveValues(update = 0),每次创建+1时,它都会增加df3,并且在新的{{1} } 被建造。如果为0,则对数据进行过滤,否则,将返回未过滤的数据。

可能有用的链接:How can I set up triggers or execution order for eventReactive or ObserveEvent?

df2