簡體   English   中英

R Shiny 使用非反應變量更新反應值

[英]R Shiny update reactive value using a non reactive variable

我有一個簡單的文本和一個簡單的按鈕

一個變量被初始化為0,每次按下按鈕,這個變量的值都會增加1,動態文本應該是一些文本和反應值的串聯。

這就是我想出的,我對反應值很陌生,所以可能有問題,但我不知道具體是什么。

變量 start 正確初始化為 0,並且文本正確呈現為 clicks 0。

一旦我按下按鈕,變量 start 就會正確更新為 1,文本也會相應地更新。 但每隔一次按下,變量就會返回其原始值 0,因此從第二次按下按鈕開始,文本將始終相同,等於點擊 1。

什么將開始變量更新為 0? 據我了解,服務器塊執行一次,並且在觸發動作時執行前端和后端之間的單個輸入/輸出,但從理論上講,從零開始的歸零應該只在啟動時發生一次。 我錯了嗎?

library(shiny)

ui <- fluidPage(
  uiOutput("text_header"),
  actionButton("go", "Go") 
)

server <- function(input, output) {
  start <- 0
  rv <- reactiveVal(paste("clicks",start))
  observeEvent(input$go, {
    start <- start + 1
    rv(paste("clicks",start))
  })
  output$text_header <- renderUI({
    h1(rv(), align = "center")
  })
}

shinyApp(ui, server)

start也需要具有反應性,才能與其他反應性值一起使用。 這是一個可以工作的重寫

library(shiny)

ui <- fluidPage(
  uiOutput("text_header"),
  actionButton("go", "Go") 
)

server <- function(input, output) {
  start <- reactiveVal(0)
  rv <- reactive(paste("clicks",start()))
  observeEvent(input$go, {
    start(start() + 1)
  })
  output$text_header <- renderUI({
    h1(rv(), align = "center")
  })
}

shinyApp(ui, server)

我們讓start反應值,然后rv完全取決於start的當前值。 也許“開始”在這里不是最好的詞,你可以重命名它

library(shiny)

ui <- fluidPage(
  uiOutput("text_header"),
  actionButton("go", "Go") 
)

server <- function(input, output) {
  start <- 0
  clickCount <- reactiveVal(start)
  rv <- reactive(paste("clicks",clickCount()))
  observeEvent(input$go, {
    clickCount(clickCount() + 1)
  })
  output$text_header <- renderUI({
    h1(rv(), align = "center")
  })
}

shinyApp(ui, server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM