在底部发布的代码中,我尝试将第二个 react 对象 (y
) 的值限制为第一个 react 对象 (x
) 的值>) 使用两个 observeEvents()
作为操作按钮点击计数器,如下图所示。插图显示了单击“Pos”按钮 3 次和“Neg”按钮 4 次的结果。这将如何完成?
我在下面的代码中注释掉了我的尝试之一。
代码:
library(shiny)
ui <- fluidPage(br(),
actionButton("Btn1", "Pos"),
actionButton("Btn2", "Neg"),
br(),br(),
textOutput("posClicks"),
textOutput("negClicks"),
textOutput("netClicks")
)
server <- function(input, output, session) {
x = reactiveVal(0)
y = reactiveVal(0)
observeEvent(input$Btn1,{x(x()+1)})
observeEvent(input$Btn2,{y(y()+1)})
# below is commented-out because it gives strange results counting in leaps of 2's
# observeEvent(input$Btn2,{
# if(x()-y(y()+1) >= 0){y(y()+1)}
# })
output$posClicks <- renderText({paste('Pos clicks =',x())})
output$negClicks <- renderText({paste('Neg clicks =',y())})
output$netClicks <- renderText({paste('Net clicks =',x()-y())})
}
shinyApp(ui, server)
最佳答案
如果你确实需要有两个单独的观察,你可以这样做
observeEvent(input$Btn1,{x(x()+1)})
observeEvent(input$Btn2,{y(y()+1)})
observe({
if (y()>x()) {y(x())}
})
您无需监听按钮的点击,只需观察y()
的值,如果它大于x()
,只需重置它。如果可以的话,更改 Btn2 逻辑会更容易
observeEvent(input$Btn1,{x(x()+1)})
observeEvent(input$Btn2,{y(min(y()+1, x()))})
关于r - 如何在观察者之间传递 react 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74880788/