在 R shiny 中,如何向操作按钮添加功能"Add"?



我正在开发R闪亮应用程序。我已经在Shiny中创建了Tab1和Tab2,我试图做的是使数据表在";表2";一旦我填写了以下表格并点击";添加";按钮

摘要

当用户在";SchoolId,UserId,类,结果"在Tab1中点击";添加";按钮;表2";应该出现。

而且一旦用户按下";添加";按钮,字段";学校ID,"UserId;等等应该是空的、准备好供用户填写"0"中第二行的数据;表2";

问题:

我确信我在这里遗漏了为";添加";按钮,因为我无法填写Tab2中第二行的详细信息,因为";添加";按钮不工作。

有人能帮忙解决这个问题吗?

library(shiny)
library(shinyBS)
library(stringr)
library(Hmisc)
library(rhandsontable)
library(shinydashboard)
library(DT)
library(V8)
ui <- fluidPage(
fluidRow(tabsetPanel(id='tabs'
, tabPanel("Tab1", uiOutput("tabP1"))
, tabPanel("Tab2", uiOutput("tabP2"))
)

)
)
server <- function(input, output, session) {
output$tabP1 <- renderUI({
tabPanel("Tap1"
, div(id = "form"
, textInput("schoolId *", label="SchoolId" )
, selectInput("userId", label="UserId"
, choices = list("UserA" = "UserA", "UserB" = "UserB",

"UserC" = "UserC")

, selected = "UserA")


, textInput("class", value = NA, label = "class")

, selectInput("result", label="result"
, choices = list("PASS" = "PASS", "FAIL" ="FAIL" ), selected = "")

)

, actionButton("add", "Add")
)
})


# -------------------- Tab2  ----------------------------------

observeEvent(input$add,{
req(input$schoolId,input$userId,input$class,input$result)
tmp<-data.frame(SCHOOLID=input$schoolId, USERID=input$userId
, CLASS= input$class
, RESULT=input$result

)

df <- rbind(df,tmp)
})
output$DT2 <- DT::renderDataTable({
df
})

output$tabP2 <- renderUI({
tabPanel("View"
, DT::dataTableOutput("DT2")
, hr()
, hidden(downloadButton('downloadData', 'Download'))

)
})

}
shinyApp(ui, server)

对于可以反复更改的值,您希望使用类似reactivereactiveValues的东西。要隐藏表格直到单击某个按钮,请根据按钮的输出使用conditionalPanel(它显示单击了多少次(。

我已经在下面的代码中实现了这些东西:

编辑:回复你的第一条评论以及

library(shiny)
library(stringr)
library(shinydashboard)
library(tidyverse)
library(DT)
ui <- fluidPage(
fluidRow(tabsetPanel(id='tabs', 
tabPanel("Tab1",
div(id = "form", 
textInput("schoolId", label="SchoolId *" ),
selectInput("userId", label="UserId", choices = c("UserA", "UserB", "UserC"),selected = "UserA"), 
textInput("class", label = "class"), 
selectInput("result", label="result", choices = c("PASS", "FAIL" ))
),
actionButton("add", "Add")
), 
tabPanel("Tab2", 
tabPanel("View", 
conditionalPanel("input.add != 0", 
DTOutput("DT2"), hr(), downloadButton('downloadData', 'Download'))
)
)
)
)
)
server <- function(input, output, session) {
store <- reactiveValues()

observeEvent(input$add,{
new_entry <- data.frame(SCHOOLID=input$schoolId, USERID=input$userId
, CLASS= input$class
, RESULT=input$result)

if("value" %in% names(store)){
store$value<-bind_rows(store$value, new_entry)
} else {
store$value<-new_entry
}
# If you want to reset the field values after each entry use the following two lines
for(textInputId in c("schoolId", "class")) updateTextInput(session, textInputId, value = "")
updateSelectInput(session, "userId", selected = "UserA")
updateSelectInput(session, "result", selected = "PASS")
})
output$DT2 <- renderDT({
store$value
})

}
shinyApp(ui, server)

最新更新