首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入$shinyTree在新呈现后不会更新

输入$shinyTree在新呈现后不会更新
EN

Stack Overflow用户
提问于 2019-10-22 13:25:56
回答 3查看 370关注 0票数 2

在下面的shiny应用程序中,我有一个重置按钮,这个按钮可以重置shinyTree。我认为对应的input$tree在按下重置后而不是得到更新,即input$tree仍然反映非重置状态。通过移动一些节点并按下重置按钮来尝试这个应用程序,您将看到,当输出被重置时,verbatimTextOutput仍然显示旧版本。

这是故意的行为吗?如何强制shinyTree在更改input$tree时更新output$tree#89会解决我的问题吗?

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

ui <- fluidPage(actionButton("reset", "reset"),
                shinyTree("tree", dragAndDrop=TRUE, sort = F, wholerow = T, unique = T),
                verbatimTextOutput("str"))



server <- function(input, output, session) {
  output$tree <- renderTree({
    input$reset
    list(
      root3 = "234",
      root1 = list(
        SubListA = list(leaf1 = "", leaf2 = "")
      ),
      root2 = list(
        SubListA = list(leaf1 = "", leaf2 = "")
      )
    )
  })

  output$str <- renderPrint({
    # shinyTrees will also be available as inputs so you can
    # monitor changes that occur to the tree as the user interacts
    # with it.
    str(input$tree)
  })
}

shinyApp(ui, server)

澄清一下:我在发布这个问题之前读过重新设置shinyTree节点选择,虽然它是相关的,但它并没有解决我的问题,因为我一开始就没有使用updateTree,而在我的实际用例中,事情要复杂得多。因此,突出显示的使用额外reactiveVal的解决方案将无法顺利工作。

我真的需要一个解决方案来确保input$tree是最新的,无论是通过用户交互还是通过R代码本身更新树。

我对闪亮的输入小部件只有表面的理解,但我想#89可以解决我的问题,因为只要有refresh,它就会将一棵新树传递给shiny。我要试试这个。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-23 07:20:34

请检查以下内容,您可以强制通过JS重置input$tree

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

ui <- fluidPage(
  useShinyjs(),
  actionButton("reset", "reset"),
                shinyTree("tree", dragAndDrop=TRUE, sort = F, wholerow = T, unique = T),
                verbatimTextOutput("str"))

server <- function(input, output, session) {

  observeEvent(input$reset, {
    runjs("Shiny.setInputValue('tree', null);")
  })

  output$tree <- renderTree({
    input$reset
    list(
      root3 = "234",
      root1 = list(
        SubListA = list(leaf1 = "", leaf2 = "")
      ),
      root2 = list(
        SubListA = list(leaf1 = "", leaf2 = "")
      )
    )
  })

  output$str <- renderPrint({
    str(input$tree)
  })
}

shinyApp(ui, server)
票数 1
EN

Stack Overflow用户

发布于 2019-10-23 07:39:45

仅供参考,正如已经假定的那样,#89解决了这个问题。

代码语言:javascript
复制
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)

背后的原因是,shinyTree作者决定不回调refresh (或setState,因为这一切都很重要),因此input$tree并不“知道”它已被更改,并返回陈旧的树。新的PR允许显式回调刷新(通过设置选项),这解决了我的问题。

票数 0
EN

Stack Overflow用户

发布于 2020-07-17 14:20:03

我不会在R 4.0.2中推荐这一解决办法:

代码语言:javascript
复制
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)

对我来说,这导致了一个类似于这个帖子的问题,我只能在重新安装R之后才能解决这个问题。

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

https://stackoverflow.com/questions/58505386

复制
相关文章

相似问题

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