首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重置为默认响应式响应式响应表?

如何重置为默认响应式响应式响应表?
EN

Stack Overflow用户
提问于 2019-08-28 22:08:48
回答 1查看 369关注 0票数 1

我正在构建一个应用程序,其中一个2乘2的表包含一些用于进一步计算的值。这些值可以由用户更新,并且用户将能够返回到原始值。

我试图通过一个操作按钮来实现它,该按钮可以将表重置为其原始值,但表不会更新。这是一个简化的示例:

代码语言:javascript
复制
rm(list = ls())
library(shiny)
library(rhandsontable)
library(shinyjs)

server <- shinyServer(function(input, output, session) {
                          DF = data.frame(A = c(1, 2), B = c(3, 4), row.names = c("C", "D"))

                          vals <- reactiveValues(reset = FALSE)

                          ## Initiate table
                          previous <- reactive({DF})

                          myChanges <- reactive({
                                         if(is.null(input$two_by_two)) {
                                                        return(previous())
                                         } else if(!identical(previous(),
                                                                         input$two_by_two)){
                                         mytable <- as.data.frame(hot_to_r(input$two_by_two))
                                         mytable
                                         }
                                                })
                          output$two_by_two <- renderRHandsontable({
                                         if(isolate(vals$reset) | is.null(input$two_by_two)) {
                                         isolate(vals$reset <- FALSE)
                                         df <- DF
                                         } else df <- myChanges()
                                         rhandsontable(df)
                                         })

                          fctout = reactive({2*myChanges()})

                          output$chg_data = renderTable({fctout()}, rownames = TRUE)

                          observeEvent(input$reset_input, {
                                           shinyjs::reset("test")
                                           vals$reset <- TRUE
                                       })
                      })
############ UI
ui <- shinyUI(fluidPage(
                  shinyjs::useShinyjs(),
                  id = "test",
                  h4("A table:"),
                  actionButton(inputId = "reset_input",
                               label = "Use example"),
                  br(),
                  rHandsontableOutput("two_by_two"),
                  br(),
                  tableOutput(outputId = "chg_data")
              ))

shinyApp(ui, server)

actionButton是否可以对rhandsontable进行响应和更新

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 22:37:36

欢迎来到Stackoverflow!

下面是一个有效的示例(降低了复杂性):

代码语言:javascript
复制
library(shiny)
library(rhandsontable)

server <- shinyServer(function(input, output, session) {
  DF <- data.frame(A = c(1, 2), B = c(3, 4), row.names = c("C", "D"))

  output$two_by_two <- renderRHandsontable({
    input$reset_input # trigger rendering on reset
    rhandsontable(DF)
  })

  output$chg_data = renderTable({
    hot_to_r(req({input$two_by_two}))*2}, rownames = TRUE)
})


ui <- shinyUI(fluidPage(
  h4("A table:"),
  actionButton(inputId = "reset_input", label = "Reset"),
  br(),
  rHandsontableOutput("two_by_two"),
  br(),
  tableOutput(outputId = "chg_data")
))

shinyApp(ui, server)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57694374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档