Stworzyłem aplikację Shiny, która pobiera dane z bazy danych. Mam wiele danych wejściowych w części UI i wiele wyników w części Server.Zrozumienie funkcji reaktywnych w Shiny
W części serwerze mam reaktywną funkcję, która buduje zapytanie za pomocą niektórych wejść i wtedy ściąga dane z bazy danych, np:
queriedData <- reactive({
query <- paste0(...,input$a,...);
return(db$find(query))
})
w gniazdach wyjściowych, odsyłam do danych w użyciu
x <- queriedData()
Moje pytania są następujące:
- wierzę, że baza danych jest odpytywany tylko wtedy, gdy dane wejściowe są re do zmiany funkcji reaktywnej. Czy to jest poprawne?
- W związku z tym, czy mam rację sądząc, że wywołanie tej funkcji reaktywnej nie powoduje odrodzenia zapytania - tj. Dane są buforowane, a dane z pamięci podręcznej są dostarczane?
- W przypadku danych wejściowych, które nie są częścią kwerendy, zakładam, że zmiany w nich nie powodują nowego zapytania do bazy danych. Czy to jest poprawne?
Wierzę, że twoje zrozumienie jest poprawne. Sposobem na przetestowanie jest umieszczenie niektórych instrukcji 'print()' w twoich funkcjach, aby zobaczyć, co zostanie uruchomione, kiedy. – SymbolixAU
Myślę, że pierwsza kwestia jest nieco inna, wartość reaktywna zostanie unieważniona, gdy dane wejściowe będą zależały od zmiany, ale zostanie ona ponownie oceniona, gdy powiedzmy, że niektóre produkty, które wymagają aktualizacji, muszą zostać zaktualizowane. Obserwatorzy działają zgodnie z twoim pierwszym punktem. –