当前位置: 首页 > 知识库问答 >
问题:

如何在Shining中重置fileInput的值?

毋举
2023-03-14

关于这个问题已经有类似的帖子了(例如,如何更新闪亮的fileInput对象?),但我仍然无法理解,在使用fileInput小部件之后,如何强制Shiny忘记input$file的值。

当一个人想用actionButton(在我的例子中称为"Submit")触发文件的上传,然后用另一个actionButton"Reset"在这里)重置它的值时,这个问题就变得很麻烦了。当再次单击“提交”按钮时,很明显输入的$file值仍然存在。

我尝试使用一些推荐的解决方案:shinyjs打包并使用renderUI/uiOutput刷新fileInput模块,但仍然没有结果。

这是我的代码:

服务器R

shinyServer(function(input, output, session) {

values <- reactiveValues(
 file = NULL
)

observeEvent(input$submit, {
 values$file <- input$file1
})

observeEvent(input$reset, {
 values$file <- NULL
 output$resettableInput <- renderUI({
  fileInput('file1', label = NULL)
 })
}, ignoreNULL = F)

output$summary <- renderText({
 return(paste('Uploaded file:', values$file$name))
})
})

用户界面。R

shinyUI(bootstrapPage(

 headerPanel('Reset / Submit file input example'),

 sidebarPanel(

  uiOutput('resettableInput'),

  fluidRow(
          column(4,
                 actionButton('reset', 'Reset All')
          ),
          column(4,
                 actionButton('submit', 'Submit')
          )
  )
 ),

 mainPanel(
  h4('Summary'),
  verbatimTextOutput('summary')
 )
))

如果有任何帮助,我将不胜感激。

共有2个答案

洪华皓
2023-03-14

我知道这是一篇旧文章,但您可以通过在服务器上从头开始重建来重置输入。

在ui中。R你可以把:

...
uiOutput('file1_ui') ## instead of fileInput('file1', label = NULL)
...

和服务器。r加上这个:

...
output$file1_ui <- renderUI({
  input$reset ## Create a dependency with the reset button
  fileInput('file1', label = NULL)
})
...
华懿轩
2023-03-14

输入$file1由Shiny缓存,因此在下一次上传之前不会更改。

因为你想要一个文件名变量映射到输入$file1$name在大多数情况下,但是当单击重置按钮时重置为NULL,你需要创建另一个层并保持这种关系。

>

  • 您可以创建变量upload\u state,使用文件上载事件将其设置为upload,使用重置按钮将其设置为reset

    根据upload\u state值,使用反应式表达式,该表达式将采用input$file1$nameNULL

    无需使用submit按钮。

    library(shiny)
    ui <- shinyUI(bootstrapPage(
      headerPanel("Reset / Submit file input example"),
      sidebarPanel(
        fileInput('file1', label = NULL),
        fluidRow(
          column(4,
                 actionButton('reset', 'Reset Input')
          ))
      ),
    
      mainPanel(
        h4("Summary"),
        verbatimTextOutput("summary")
      )
    ))
    
    server <- shinyServer(function(input, output, session) {
      values <- reactiveValues(
        upload_state = NULL
      )
    
      observeEvent(input$file1, {
        values$upload_state <- 'uploaded'
      })
    
      observeEvent(input$reset, {
        values$upload_state <- 'reset'
      })
    
      file_input <- reactive({
        if (is.null(values$upload_state)) {
          return(NULL)
        } else if (values$upload_state == 'uploaded') {
          return(input$file1)
        } else if (values$upload_state == 'reset') {
          return(NULL)
        }
      })
    
      output$summary <- renderText({
        return(paste("Uploaded file:", file_input()$name))
      })
    })
    
    shinyApp(ui = ui, server = server)
    

  •  类似资料:
    • Shining Panda是一个Jenkins的插件,支持Python多个配置环境的持续构建与测试。 支持构建工具(virtualenv builder, tox builder),支持测试相关的工具:nose,coverage,pylint

    • 问题内容: 我怎样才能 重新 在一个领域? 我希望它从头开始计算。 问题答案: 您可以使用以下方法重置计数器: 对于InnoDB,您不能将值设置为小于或等于当前最大索引。(引自ViralPatel): 请注意,您不能将计数器重置为小于或等于已使用的任何值。对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前的最大值加1。对于InnoDB,如果该值小于

    • 问题内容: 在PostgreSQL中,我可以做这样的事情: 是否有Oracle等效产品? 问题答案: 这是一个很好的过程,可以将Oracle专家Tom Kyte的任何序列重置为0 。在下面的链接中也对正反两方面进行了精彩的讨论。

    • 我用登录名和密码启动了主窗口(class)和模式窗口(class)。而主舞台= 如果用户有效,则关闭模式窗口。如何重置主阶段的效果 谢谢主要类别: 公共类主应用程序扩展{ } 登录类: 公共类登录{ }

    • 我正在使用kartik yii2小部件fileinput。我将“maxFileSize”设置为1024。当上传的文件超过允许的最大大小时,会显示错误消息,我想更改此错误文本并用格鲁吉亚语显示。我怎样才能做到这一点?这是我的密码: 我需要更改此错误消息:

    • 模块: fileinput 目的: 创建命令行过滤程序. Python 版本: ? 描述 让我们从 fileinput 模块开始这个系列的学习吧. 这是一个非常有用的模块, 用于创建处理文本文件中过滤信息的命令行程序. 例如, 最近为我的朋友 Patrick 写了个应用 m3utorss , 用于将一些小demo转成podcastable格式便于记录. 程序的输入是一个或多个m3u文件, 列出了所