input$shinyTree 在新渲染后没有得到更新
input$shinyTree does not get updated after new render
在下面的 shiny
应用程序中,我有一个重置按钮,可以重置 shinyTree
。我认为相应的 input$tree
在按下重置后 不会 得到更新,即 input$tree
仍然反映未重置状态。通过移动一些节点并按下重置按钮来试用该应用程序,您会看到虽然输出被重置,但 verbatimTextOutput
仍然显示旧版本。
这种行为是故意的吗?每当 output$tree
发生变化时,如何强制 shinyTree
更新 input$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)
澄清一下:我在发布这个问题之前已经阅读了 ,虽然相关,但它并没有解决我的问题,因为我一开始并没有在实际使用中使用 updateTree
情况要复杂得多。因此,使用额外 reactiveVal
的突出显示解决方案将无法顺利运行。
我真的需要一个解决方案来确保 input$tree
是最新的,无论树是通过用户交互还是通过 R
代码本身更新。
我对闪亮的输入小部件只有肤浅的了解,但我想 #89 可以解决我的问题,因为它会在有 [=24= 时将一棵新树传递给 shiny
].我会试试这个。
请检查以下内容,您可以通过 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)
仅供参考,如前所述,#89 解决了这个问题。
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)
背后的原因是 shinyTree
作者决定不在刷新时回调(或者 setState
所有重要的事情)因此 input$tree
不 "know" 它是改变了 returns 陈旧的树。新的 PR 允许在刷新时显式回调(通过设置选项),这解决了我的问题。
我不会在 R 4.0.2 中推荐这个解决方案:
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)
对我来说,它导致了与此类似的问题post,我只能在重新安装 R 后才能解决。
在下面的 shiny
应用程序中,我有一个重置按钮,可以重置 shinyTree
。我认为相应的 input$tree
在按下重置后 不会 得到更新,即 input$tree
仍然反映未重置状态。通过移动一些节点并按下重置按钮来试用该应用程序,您会看到虽然输出被重置,但 verbatimTextOutput
仍然显示旧版本。
这种行为是故意的吗?每当 output$tree
发生变化时,如何强制 shinyTree
更新 input$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)
澄清一下:我在发布这个问题之前已经阅读了 updateTree
情况要复杂得多。因此,使用额外 reactiveVal
的突出显示解决方案将无法顺利运行。
我真的需要一个解决方案来确保 input$tree
是最新的,无论树是通过用户交互还是通过 R
代码本身更新。
我对闪亮的输入小部件只有肤浅的了解,但我想 #89 可以解决我的问题,因为它会在有 [=24= 时将一棵新树传递给 shiny
].我会试试这个。
请检查以下内容,您可以通过 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)
仅供参考,如前所述,#89 解决了这个问题。
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)
背后的原因是 shinyTree
作者决定不在刷新时回调(或者 setState
所有重要的事情)因此 input$tree
不 "know" 它是改变了 returns 陈旧的树。新的 PR 允许在刷新时显式回调(通过设置选项),这解决了我的问题。
我不会在 R 4.0.2 中推荐这个解决方案:
devtools::install_github("shinyTree/shinyTree#89")
options(shinyTree.refresh = TRUE)
对我来说,它导致了与此类似的问题post,我只能在重新安装 R 后才能解决。