2013-06-18 11 views
9

私はR.シャイニー - renderUIでの問題()の反応性

でシャイニーパッケージで問題が発生した私はserver.Rで 『#オプション1』が動作しない理由を理解しようとしているが、「#をコメントしていますオプション2 "が機能します。 "#Option 1"をアクティブにすると、ランダムな文字列を入力してボタンを押してみてください。最初にテキストボックスの値を "abc"に置き換えますが、次の時間はすべて変更されません。

val()は既に入力$ changeに依存しているので、ボタンを押すたびに再実行する必要があります。さらに、 "#Option 2"はisolate()にラップされているため、任意の反応性。

"#Option 1"を使用すると、実際には値が "abc"に一部変更されているようです。 Google Chromeのinspect要素を開いておくと、 "#Option 2"はボタンを押すたびに値を変更し、 "#Option 1"も値を "abc"に変更しますが、ボタンが押されたときだけ画面が更新されます初めて押す。

server.R

require(shiny) 

shinyServer(function(input, output) { 

    val <- reactive({ 
    if(input$change>0) { 
    # Option 1 
     'abc' 
#  # Option 2 
#  isolate({ 
#   paste('abc',input$txt,"") 
#  }) 
    } else { 
     '' 
    } 
    }) 

    output$textbox <- renderUI({ 
    textInput("txt","Text",val()) 
    }) 

}) 

ui.R

require(shiny) 
require(shinyIncubator) 

shinyUI(pageWithSidebar(
    headerPanel('Test'), 

    sidebarPanel(
    uiOutput("textbox"), 
    actionButton("change", "Change") 
), 

    mainPanel(

) 
)) 

答えて

4

は、ここに私の応答を参照してください。

+0

ありがとうございます!テキスト入力値の最後にスペースを追加し、最後に入力値にスペースがある場合はスペースを削除することで問題を解決しました。そのため、新しい値は常に前の値と異なります。私はとにかくすべての着信文字列をトリムします。 – user1603038

1

どこかに隠されたバグがあるかもしれないようにこれが見えないが、私は次のことができます。ここでは

コードですそれを追跡していない。

updateTextInput機能でこの効果を達成できるはずです。

問題を詳しく見るために、私はこれに対してバグを作成しました。 https://github.com/rstudio/shiny/issues/181。私は何が起こっているのかわかったときにこの投稿を更新しようとします。

https://groups.google.com/d/msg/shiny-discuss/PLHauRlFw3k/AnoD7NusvDIJ

要旨は、サーバーがtextbox出力に正確に同じ値を送信し続けるということですので、クライアントはそれを無視するのに十分な「スマート」である:

関連する問題