Я создал приложение Shiny, которое извлекает данные из базы данных. У меня есть несколько входов в части пользовательского интерфейса и несколько выходов в части сервера.Понимание реактивных функций в Shiny
В серверной части у меня есть реактивная функция, которая строит запрос, используя некоторые из входов, а затем тянет в данных из базы данных, например:
queriedData <- reactive({
query <- paste0(...,input$a,...);
return(db$find(query))
})
В выходных слотах, я отношусь к данным при помощи
x <- queriedData()
Мои вопросы:
- Я считаю, что база данных опрашивается только тогда, когда входы, которые повторно перешли на изменение реактивной функции. Это верно?
- Как мне кажется, я правильно понимаю, что вызов этой реактивной функции не порождает запрос - то есть данные кэшируются и кэшируются данные?
- Для входов, которые не являются частью запроса, я предполагаю, что изменения в них не вызывают новый запрос к базе данных. Это верно?
Я считаю, что ваше понимание верное. Способ тестирования состоит в том, чтобы поместить некоторые операторы 'print()' в ваши функции, чтобы увидеть, что срабатывает, когда. – SymbolixAU
Я думаю, что первый момент немного отличается, реактивное значение будет недействительным, когда входы зависят от изменений, но он будет переоценен, когда скажем, что некоторые выходы, которые используют реактивные потребности для обновления. Наблюдатели работают в соответствии с вашим первым пунктом. –