Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@komde

eventReactive() と observeEvent() の違いを動作で理解する

More than 3 years have passed since last update.

なんとなくマニュアルを流し読みして理解していた気になっていたのですが、デバッグではまったりして分かったことがあったので記事にしておきます。

概要

Shinyでイベントをモニタして発火する関数としてeventReactive() と observeEvent() があります。マニュアルには以下のように記載してあります。

observeEvent returns an observer reference class object. eventReactive returns a reactive expression object.
observeEventはオブサーバクラスオブジェクトを返し、eventReactiveはリアクテブエクスプレッションを返します

ここで注意なのがreactive valueを作るということはそのreactiveが伝播する範囲を調べ、UI上で使われなければ何も起こらないという動作になります。つまり例えば途中までコードを書いて、「ボタン押したら発火するかな~」的なテストすることはよくありますが、reactive valueがUI上で使われていなければ発火しません。なのでデバッグする時はprint()でコンソールに出すだけはダメで、modalDialogを出したりrenderTextを使用してShinyのUI側にreactiveの作用先を準備してデバッグしましょう。

サンプルコード

6行目がコメントアウトされているとaction_buttonは一切発火しません。
action_button2は常に反応します。

library(shiny)
shinyApp(
  ui = fluidPage(
    actionButton("action_button", "Button1")
    ,actionButton("action_button2", "Button2")
    #,textOutput("text")
  ),
  server = function(input, output) {
    reactive_data <- eventReactive(input$action_button, {
      print("brabra")
      return("brabra_return")
    })
    observeEvent(input$action_button2, {
      print("brabra2")
    })
    output$text <- renderText({reactive_data()})
  }
)
1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
komde
JINS MEME のハードウェアとファームウェアとSDKとアルゴリズムとアプリとクラウドのリフォームをする中の人。Fitness x tech。R/JavaScript、Chromebook使い。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?