#shiny #expression #reactive
Вопрос:
Я хочу использовать реактивное выражение, которое может быть обновлено одним из двух способов. Ниже приведен очень простой пример с числовым вводом или кнопкой сброса, чтобы вернуть выражение в исходное состояние (на практике выражение более сложное, поэтому не может использовать реактивные значения). Похоже, что распознается только второе определение num, поэтому в примере числовой ввод игнорируется).
Что я упускаю?
Большое спасибо!
ui lt;- fluidPage( numericInput("number", "Input", 1), actionButton("button", "Reset"), textOutput("check") ) server lt;- function(input, output){ num lt;- reactive({ input$number }) num lt;- eventReactive(input$button, { 1 }) output$check lt;- renderText({ num() }) } shinyApp(ui, server)
Ответ №1:
Редактировать:
Мы можем использовать observeEvent()
каждый ввод для обновления num()
.
library(shiny) ui lt;- fluidPage( numericInput("number", "Input", 1), actionButton("button", "Reset"), textOutput("check") ) server lt;- function(input, output) { num lt;- reactiveVal() observeEvent(input$number, { num(input$number) }) observeEvent(input$button, { num(1) }) observeEvent(c(input$button, input$number), { output$check lt;- renderText({ num() }) }) } shinyApp(ui, server)
Комментарии:
1. Спасибо @jpdugo17, но это приведет меня туда, куда я хочу. Реактивное выражение по-прежнему реагирует только на кнопку сброса, а не на числовой ввод (как вы можете видеть по тому факту, что вывод под кнопкой сброса не реагирует на числовой ввод). Есть еще какие-нибудь мысли? Извините, если мой предыдущий вопрос не был ясен.
2. Следует читать «…это не приведет меня туда, куда я хочу…» Чтобы уточнить, моя проблема заключается в том, чтобы заставить выражение реагировать на оба ввода, а не обновлять числовой ввод.
3. Я отредактировал ответ, пожалуйста, взгляните.
4. Если я не ошибаюсь, вы хотите, чтобы на выходе отображалось значение от
input$number
, и если кнопка нажата, вывод должен вернуться к 1?5. Это делает свое дело! Так просто, что я просто не мог этого понять. Спасибо вам за ваше терпение @jpdugo17.