如何根据选定的 DT 行更新 numericInput 默认值

How to update numericInput default value based on DT row selected

我想根据来自 DT table 的不同行用户 select 更新 numericInput 值。

下面是我的简单示例。所以,如果用户 select 第一行,值应该是 50。如果用户 select 第二行,值应该是 100。有没有办法做到 without 使用 'refresh' 按钮?

library(shiny)
library(DT)


ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
            numericInput("price",
                        "Average price:",
                        min = 0,
                        max = 50,
                        value = 0),

            actionButton('btn', "Refresh")
        ),

        mainPanel(
            DT::dataTableOutput('out.tbl')
        )
    )
)

server <- function(input, output, session) {

    price_selected <- reactive({
        if (input$out.tbl_rows_selected == 1) { 
            price = 50
        } else {
            price = 100
        } 
    })

    observeEvent (input$btn, {
        shiny::updateNumericInput(session, "price",  value = price_selected())
    })

    output$out.tbl <- renderDataTable({
        Level1 <- c("Branded", "Non-branded")
        Level2 <- c("A", "B")
        df <- data.frame(Level1, Level2)
    })
}

shinyApp(ui = ui, server = server)

使用你的反应变量的解决方案

price_selected <- reactive({
    if (isTRUE(input$out.tbl_rows_selected == 1)) { 
        price = 50
    } else {
        price = 100
    } 
})

shiny::observe({
    shiny::updateNumericInput(session, "price",  value = price_selected())
})

请注意,您可以直接观察 input$out.tbl_rows_selected(不需要反应变量)