reactlog extends Shiny with new features that make it easier to debug and trace reactivity, especially in larger apps.
- Print the call stack that caused invalidation (rstudio/shiny#1846)
- List reactive dependencies in a tree structure
- Interactive filtering on selected nodes (rstudio/shiny#1532)
- Jump to the previous/next flush cycle (i.e. all white nodes) (rstudio/shiny#1532)
- Performance improvements
# install.packages("devtools")
devtools::install_github("glin/reactlog")
options(shiny.reactlog = TRUE)
rxA <- reactive({
input$A
})
observe({
# call it in a reactive context
reactlog::traceInvalidation()
rxA()
})
# or on a reactive expression/observer
reactlog::traceInvalidation(rxA)
reactive({
# when multiple dependencies change, it might be useful to see them all
# not just the one that invalidated the context
reactlog::listDependencies()
rxA() + input$A + input$B
})
# also works
reactlog::listDependencies(rxA, invalidated = TRUE)
# when called without a reactive context, shows the entire dependency tree
reactlog::listDependencies()
# show the graph for the most recent session
reactlog::showReactGraph()
observe({
# show the graph filtered on this observer and its dependencies
reactlog::showReactGraph()
})
https://glin.github.io/reactlog/reference/index.html
reactlog is experimental and relies on Shiny internals which are subject to change. Use at your own risk, for debugging and development only!