我正在尝试接受一些用户输入,将其与数据库中的值进行比较,然后根据输出显示模式。
我有以下示例代码:
emp_table 是我的主表,其中包含员工列表及其详细信息
emp_name 是一个包含员工姓名的文本字段
emp_id 是一个包含员工ID的文本字段
emp_info_submit 是用户在输入员工姓名和员工ID后点击的操作按钮
library(shiny)
library(shinydashboard)
library(dplyr)
#This is my master database with all the employee details
emp_database<-data.frame("emp_name" = "Mark", "emp_id"= 103221)
#defining the ui
ui <- dashboardPage(
dashboardHeader(title = "Placeholder text"),
#Creating the appropirate navigation tabs
dashboardSidebar(
sidebarMenu(id = "nav_bar",
menuItem(text = "Employee Info",tabName = "emp_info",icon = icon("info-circle"))
)
),
#Populating the Employee Info tab
dashboardBody(tabItems(
tabItem(
tabName = "emp_info",
fluidRow(
box(
textInput(inputId = "emp_name",label = "Enter your Name",placeholder = "enter name here",width = "100%"),
textInput(inputId = "emp_id",label = "Enter your Employee ID",placeholder = "enter employee id here",width = "100%"),
actionButton(inputId = "emp_info_submit",label = "Submit",icon = icon("thumbs-up"))
)
)
)
))
)
server <- function(input, output) {
observeEvent(input$emp_info_submit,{
name1<-reactive({as.character(input$emp_name)})
id1<-reactive({as.numeric(input$emp_id)})
reactive({
if(name1 %in% emp_database$emp_name){
showModal(modalDialog("Exists"))
}
else{
showModal(modalDialog("DOes not exist"))
}
})
})
}
shinyApp(ui = ui, server = server)
基本上,我通过反复试验中学到的是,除非将用户输入值包装在反应性环境中,否则无法将其与数据库进行比较。但是,运行我的应用程序时不会触发模式。
我要去哪里错了?另外,如果我的代码写得不好,请提出一些好的编码实践。
EDIT1:还包括UI功能。
答案 0 :(得分:2)
在观察者内部使用观察者很奇怪。试试:
server <- function(input, output) {
name1 <- eventReactive(input$emp_info_submit, {
as.character(input$emp_name)
})
id1 <- eventReactive(input$emp_info_submit, {
as.character(input$emp_id)
})
observeEvent(input$emp_info_submit,{
if(name1() %in% emp_database$emp_name){ # was an error here: name1 instead of name1()
showModal(modalDialog("Exists"))
}
else{
showModal(modalDialog("DOes not exist"))
}
})
}