输入$shinyTree在新渲染后不会更新

输入$shinyTree在新渲染后不会更新,r,shiny,shinytree,R,Shiny,Shinytree,在下面的shiny应用程序中,我有一个重置按钮,可以重置shinyTree。我认为在按下重置按钮后,相应的input$tree不会更新,即input$tree仍反映未重置状态。通过移动一些节点并按下重置按钮来尝试应用程序,您将看到,当输出被重置时,逐字输出仍然显示旧版本 这种行为是故意的吗?当output$tree发生更改时,如何强制shinyTree更新input$tree?能解决我的问题吗 library(shiny) library(shinyTree) ui <- fluidPa

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

这种行为是故意的吗?当
output$tree
发生更改时,如何强制
shinyTree
更新
input$tree
?能解决我的问题吗

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)
库(闪亮)
图书馆(银树)

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

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)
库(闪亮)
图书馆(银树)
图书馆(shinyjs)

ui仅供参考,正如已经假设的那样,解决了这个问题

devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)

背后的原因是
shinyTree
作者决定在刷新时不回调(或者
setState
处理所有相关问题),因此
input$tree
不“知道”它已更改并返回陈旧的树。新的PR允许在刷新时显式回调(通过设置选项),这解决了我的问题。

我不建议在R 4.0.2中使用此解决方案:

devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)

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

我已经提前阅读了这篇文章,尽管相关,但它并不能解决我的问题。我在帖子里说得很清楚。不过谢谢你的指点。啊,好吧,你应该首先提到这一点。我发布了另一个解决方案-希望能有所帮助。好主意。我刚刚在
renderTree
中添加了对
input$tree
的依赖性,以获得完整性,但在其他方面效果很好+1.