我知道已经回答了类似的question,但是解决方案在string-input上创建了一个带有不同标签的新actionButton。我需要的是保留按钮(按钮的计数器),因为当我更改标签并创建一个新按钮时,它的计数器为0(未点击)。
所以基本上我需要类似更新功能的东西,只需在按下时更改actionButton的标签。按一下,标签就会改变。
input$Button <- renderUI({
if(input$Button >= 1) label <- "new label"
else label <- "old label"
actionButton("Button", label = label)
})
这样的东西,但没有重置按钮的值(通过创建一个全新的)。
谢谢!
答案 0 :(得分:3)
reactiveValues()
可以提供帮助。有关详细信息,请查看http://shiny.rstudio.com/articles/reactivity-overview.html。
在以下示例中,我将您的input$Button
重命名为input$click
,以避免双重使用“Button”名称。
由于我们将标签包装在renderUI()
中,input$click
最初会在创建后触发吗?!?,这就是我放置标签的原因
条件为:if(vars$counter >= 2)
另一种解决方案可能是删除只读属性(在此处找到:https://github.com/rstudio/shiny/issues/167)
attr(input, "readonly") <- FALSE
input$click <- 1
举个例子 将以下内容粘贴到R控制台中:
ui <- bootstrapPage(
uiOutput('Button')
)
server <- function(input, output) {
# store the counter outside your input/button
vars = reactiveValues(counter = 0)
output$Button <- renderUI({
actionButton("click", label = label())
})
# increase the counter
observe({
if(!is.null(input$click)){
input$click
isolate({
vars$counter <- vars$counter + 1
})
}
})
label <- reactive({
if(!is.null(input$click)){
if(vars$counter >= 2) label <- "new label"
else label <- "old label"
}
})
}
# run the app
shinyApp(ui = ui, server = server)
答案 1 :(得分:3)
您可以使用本机闪亮套餐中的updateActionButton
:
ui <- fluidPage(
actionButton('someButton', ""),
h3("Button value:"),
verbatimTextOutput("buttonValue"),
textInput("newLabel", "new Button Label:", value = "some label")
)
server <- function(input, output, session) {
output$buttonValue <- renderPrint({
input$someButton
})
observeEvent(input$newLabel, {
updateActionButton(session, "someButton", label = input$newLabel)
})
}
shinyApp(ui, server)