我正在尝试向我闪亮的应用程序添加一个数据刷新按钮,因此一旦我将新行插入到我的sql表中,该行就会出现在我的数据中,而无需完全重新启动应用程序。可能还值得注意的是,这周我是闪亮的新手,所以我一边学习一边自我学习。
所以情况是我有我的数据,然后我使用文本框添加到我的闪亮数据中,我现在单击我创建的刷新按钮,但没有出现新数据。
#global
myMap = #grab data from sql
theCol = sort(unique(myMap$col))
#ui
actionButton(inputId = "refreshData",
label = "Refresh Data")
#server
observeEvent(input$refreshData, {
theCol = reactive({
myMap = #grab data from sql
theCol= sort(unique(myMap$col))
})
})
我认为这不能正常工作,因为服务器设置得不是很好,所以当我单击“刷新数据”时,不会出现任何新内容,就像它从启动时仍在使用表一样。从网上搜索
reactiveVal()
似乎是我在这里寻找的东西,但我不知道如何使用它。
只是将评论中所说的内容放在一起。
将
input$refreshData
放入 reactive
内将依赖于它,即使它的值(每次单击按钮时增量 int)未在块中的任何位置使用。
现在
theCol
已成为一个响应式(基本上它是一个函数),您需要使用 theCol()
进行调用。
我添加了
observe
只是为了打印到控制台。
library(shiny)
# Define UI for application
ui <- fluidPage(
# -- input button
actionButton(inputId = "refreshData",
label = "Refresh Data"))
# Define server logic
server <- function(input, output) {
# update data
theCol <- reactive({
# -- just taking dependency on the actionButton
# (output value goes nowhere)
input$refreshData
# -- generates random strings
myMap <- data.frame(col = do.call(paste0, replicate(5, sample(LETTERS, 3, TRUE), FALSE)))
sort(unique(myMap$col))
})
observe(str(theCol()))
}
# Run the application
shinyApp(ui = ui, server = server)