gpt4 book ai didi

r - 如何在 Shiny 中创建登录页面?

转载 作者:行者123 更新时间:2023-12-04 15:31:54 28 4
gpt4 key购买 nike

目标是拥有一个 Shiny 的模块ui1.R加载第二个模块 ui2.R当按钮confirm被点击。我认为问题在于 is.null(input$confirm)总是无效的。我需要的是只使表达式无效一次 confirm被点击。
这个问题非常接近Starting Shiny app after password input ,但我正在尝试模块化解决方案。

ui.R

library(shiny)
library(shinyjs)
htmlOutput("page")

服务器.R
rm(list = ls())
library(shiny)
library(dplyr)
library(shinyjs)
Logged <- FALSE

shinyServer(function(input, output) {

source('ui1.R') #login page
source('ui2.R')


observeEvent(!is.null(input$confirm), {
Logged <<- T
})

observe({
if (Logged == FALSE) {
output$page <- renderUI({
ui1Output('ui1Output')
})
output$lsuId <- renderText({ input$lsuId })
}
if (Logged == TRUE)
{
output$page <- renderUI({ ui2 })
}
})
callModule(ui1,'ui1')
})

ui1.R
library(shinyjs)

ui1Output <- function(id, label = "ui1") {
ns <- NS(id)
shinyUI(fluidPage(
useShinyjs(),
titlePanel("Form"),
div(textInput(ns("lsuId"), "This has to be filled", ""),
actionButton(ns("confirm"), "Submit", class = "btn-primary")
)
))
}

ui1 <- function(input, output, session) {
observe({
LSUID <- reactive({ input$lsuId })
shinyjs::toggleState(id = "confirm", condition = LSUID())
})
}

ui2.R
ui2<-  shinyUI(fluidPage(
div("well done!")
))

全局.R
source('ui1.R') #login page
source('ui2.R')

最佳答案

我认为你在这里有两个问题:

首先您的确认按钮值存储在这里:input$"ui1Output-confirm"而不是在这里:input$confirm
我建议更换:

observeEvent(is.null(input$confirm), {
Logged <<- F
})

经过:
observeEvent(input$"ui1Output-confirm", {
Logged <<- T
})

然后您的观察函数不包含对按钮的任何引用,因此当用户单击它时不会执行它。我对此没有适当的解决方案,但一个简单的技巧是添加:
tmp <- input$"ui1Output-confirm"

在观察部分的开头:
observe({
tmp <- input$"ui1Output-confirm"

if (Logged == FALSE) {
output$page <- renderUI({
ui1Output('ui1Output')
})
output$lsuId <- renderText({ input$lsuId })
}
if (Logged == TRUE)
{
output$page <- renderUI({ ui2 })
}
})

关于r - 如何在 Shiny 中创建登录页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558198/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com