Основной блестящий вопрос - Реагируем ли переменные программы? - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть простое приложение Shiny, которое отображает вопрос на главной панели. Вопросы просто 10, 20 или 30.

Результат «Правильно» или «Неверно» отображается в консоли R.

Затем вы можете нажать кнопку ActionButton «Далее», чтобы перейти к следующему вопросу, который должен отображаться в главной панели. В настоящее время вопрос не отображается, но индексация работает.

Мне неясно, как отобразить второй вопрос. Я считаю, что мне нужно сделать "questions" или "question_index" реактивной переменной ?? Не уверен.

Кроме того, я использую глобальную переменную для question_index, что я считаю плохой формой. Опять же, не уверен, что альтернатива.

js <- '
$(document).on("keyup", function(e) {
if(e.keyCode == 13){
Shiny.onInputChange("keyPressed", Math.random());
}
});
'

shinyApp(
  ui = fluidPage(
    tags$script(js),

    sidebarLayout(
      sidebarPanel(
        textInput("answer", 
          width = "50px",
          label = "Answer"),

      actionButton(
        inputId = "next_question",
        label = "Next"
      )
    ),

      mainPanel(
        textOutput("equation")
      )
    )
  ),

  server = function(input, output, session){

    questions <- c("10", "20", "30")
    question_index <<- 1

    Answer <- reactiveVal()

    observeEvent(input$keyPressed, {
      Answer(input$answer)
      if (input$answer == questions[question_index]) {
        print("Right")
      } else {
        print("Wrong")
      }
    })

    output$equation <- renderText({
     # Answer()
      questions[question_index]
    })

    observeEvent(input$next_question, {
      question_index <<- question_index + 1
      print(question_index)
    })

  }
)

1 Ответ

0 голосов
/ 08 сентября 2018

Один из способов - сделать индекс вопросов реагирующим, как этот

values <- reactiveValues(question_index=1)

и затем назовите его как

values$question_index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...