基本闪亮问题-使程序变量具有反应性?

时间:2018-09-08 02:00:47

标签: r shiny

我有一个简单的Shiny应用程序,可在主面板中显示问题。问题仅仅是10、20或30。

R控制台中显示“正确”或“错误”的结果。

然后可以单击操作按钮“下一步”转到下一个问题,该问题应显示在mainPanel中。当前,该问题未显示,但索引正在工作。

我不清楚如何显示第二个问题。我相信我需要使“ 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 :(得分:1)

一种方法确实是使问题索引具有这种反应性

SkeletonHelper

然后将其命名为

values <- reactiveValues(question_index=1)