Reaktywność sprawia, że aplikacje Shiny reagują. Wygląda na to, że aplikacja aktualizuje się natychmiast, gdy użytkownik dokona zmiany. Jednak w rzeczywistości Shiny ponownie uruchamia twoje wyrażenia R w dokładnie zaplanowany sposób co kilka mikrosekund, co stwarza iluzję responsywności. Nie musisz wiedzieć, jak zachodzi reaktywność, aby go używać, ale zrozumienie reaktywności sprawi, że będziesz lepszym programistą Shiny.
Pamiętasz, że kiedy uruchomiliśmy naszą bardzo prostą aplikację Shiny w poprzedniej sekcji, konsola R przestała być interaktywna? Cóż, działo się tak, ponieważ wykonywanie funkcji shinyApp() sprawia, że R jest zajęty przez ciągłe monitorowanie i aktualizowanie wyrażeń w razie potrzeby, co tworzy wrażenia responsywne dla użytkowników. Teraz wyobraź sobie, że masz złożoną aplikację z dużą ilością interaktywności, a uruchamianie każdego wyrażenia co kilka mikrosekund całkowicie nasyciłoby twój procesor, a użytkownicy mieliby okropne wrażenia z użytkowania. Dlatego Shiny musi być wystarczająco inteligentny, aby aktualizować tylko te wyrażenia, które tego wymagają. Za każdym razem, gdy użytkownik przesyła akcję (zdarzenie), wyrażenia obsługujące takie zdarzenia zostają unieważnione, co oznacza, że wymagają aktualizacji, a to zachowanie jest propagowane wśród wszystkich wyrażeń, które od nich zależą. Po upływie kilku mikrosekund R sprawdzi, które wyrażenia są oznaczone do aktualizacji i tylko je zaktualizuje. Opisany mechanizm może zmniejszyć liczbę przeliczanych wyrażeń z tysięcy do żadnego, na wypadek gdyby nie było żadnej akcji użytkownika, a najwyżej do kilku, ponieważ użytkownikowi bardzo trudno jest wiele osiągnąć w ciągu kilku mikrosekund co z kolei skutkowałoby kilkoma wymaganymi aktualizacjami, zamiast pełnej aktualizacji aplikacji za każdym razem. Ten mechanizm pozwala R na obsługę złożonych aplikacji Shiny i jest kluczem do reaktywności. Pozwala na jak najszybszą aktualizację aplikacji, dzięki czemu koordynacja wejścia / wyjścia jest niemal natychmiastowa.