在下面的shiny应用程序中,我有一个重置按钮,这个按钮可以重置shinyTree。我认为对应的input$tree在按下重置后而不是得到更新,即input$tree仍然反映非重置状态。通过移动一些节点并按下重置按钮来尝试这个应用程序,您将看到,当输出被重置时,verbatimTextOutput仍然显示旧版本。
这是故意的行为吗?如何强制shinyTree在更改input$tree时更新output$tree?#89会解决我的问题吗?
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。我要试试这个。
发布于 2019-10-23 07:20:34
请检查以下内容,您可以强制通过JS重置input$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)发布于 2019-10-23 07:39:45
仅供参考,正如已经假定的那样,#89解决了这个问题。
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)背后的原因是,shinyTree作者决定不回调refresh (或setState,因为这一切都很重要),因此input$tree并不“知道”它已被更改,并返回陈旧的树。新的PR允许显式回调刷新(通过设置选项),这解决了我的问题。
发布于 2020-07-17 14:20:03
我不会在R 4.0.2中推荐这一解决办法:
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)对我来说,这导致了一个类似于这个帖子的问题,我只能在重新安装R之后才能解决这个问题。
https://stackoverflow.com/questions/58505386
复制相似问题