window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() StimulusReflex - szybki sposób na tworzenie aplikacji reaktywnych - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2021-06-22
Software Development

StimulusReflex - szybki sposób na tworzenie aplikacji reaktywnych

The Codest

Paweł Muszyński

Software Engineer

Czym jest StimulusReflex? Dość popularne obecnie podejście HTML over-the-wire doprowadziło nas do stworzenia frameworków i bibliotek, które wysyłają HTML po kablu zamiast używać JSON. StimulusReflex jest jednym z nich.

Jest to nowy sposób tworzenia reaktywnego interfejsu użytkownika w Ruby on Rails.
StimulusReflex rozszerza możliwości Rails i Stimulus poprzez przechwytywanie interakcji użytkownika i przekazywanie ich do Rails przez websockets w czasie rzeczywistym. Strony są szybko renderowane, a wszystkie aktualizacje są wysyłane do klienta za pośrednictwem CableReady.

CableReady pozwala na tworzenie aktualizacji w czasie rzeczywistym poprzez wyzwalanie zmian DOM po stronie klienta, zdarzeń i powiadomień poprzez ActionCable. W przeciwieństwie do Ajax, operacje nie zawsze są inicjowane przez użytkownika innej przeglądarki, na przykład mogą być również inicjowane przez pracowników.

StimulusReflex został pierwotnie zainspirowany LiveView Phoenixa (alternatywa dla SPA). Celem StimulusReflex zawsze było uczynienie budowania nowoczesnych aplikacji z Railsami najbardziej produktywną i przyjemną opcją. I moim zdaniem jest to dokładnie to, co osiągnęli tutaj.

Dlaczego powinniśmy używać StimulusReflex?

To proste, skupić się na rozwijaniu produkt zamiast wprowadzać konsekwentne zmiany w nowoczesnych JavaScript. Również, StimulusReflex aplikacje są proste, zwięzłe i jasne kod i bezproblemową integrację z Ruby on Rails. Pozwala to małym zespołom RoR robić duże rzeczy nawet bez dużej wiedzy na temat React, Vue lub ich nowoczesne rozwiązania JavaScript.

Jak działa StimulusReflex?

Refleks

Refleks to transakcyjna aktualizacja interfejsu użytkownika, która odbywa się za pośrednictwem trwałego otwartego połączenia z serwerem. StimulusReflex mapuje żądania do Refleks klasa. Refleks klasy znajdują się w app/reflexes katalog.

 class PostReflex < ApplicationReflex
 koniec


Jeśli utworzymy klasę Reflex z generatorem, zobaczymy, że nasza klasa zawiera ten komentarz:

# Wszystkie instancje Reflex zawierają CableReady::Broadcaster i udostępniają następujące właściwości:
  #
  # - connection - połączenie ActionCable,
  # - channel - kanał ActionCable,
  # - request - proxy ActionDispatch::Request dla połączenia socket,
  # - session - magazyn ActionDispatch::Session dla bieżącego gościa,
  # - flash - ActionDispatch::Flash::FlashHash dla bieżącego żądania,
  # - url - adres URL strony, która wywołała odruch,
  # - params - parametry z najbliższej formy elementu (jeśli istnieją),
  # - element - obiekt typu Hash reprezentujący element HTML, który wywołał odruch,
  # - signed - używa podpisanego identyfikatora globalnego do mapowania zestawu danych przypisanego do modelu, np. element.signed[:foo],
  # - unsigned - używa niepodpisanego identyfikatora globalnego do mapowania zestawu danych przypisanego do modelu, np. element.unsigned[:foo],
  # - cable_ready - specjalny cable_ready, który może nadawać do bieżącego gościa (bez nawiasów),
  # - reflex_id - UUIDv4, który jednoznacznie identyfikuje każdy Reflex.

Jak widzimy, istnieje kilka właściwości, które można wykorzystać w naszej klasie. Najbardziej interesująca na początku będzie właściwość element która zawiera wszystkie atrybuty elementu DOM kontrolera Stimulus, a także inne właściwości, takie jak tagName, sprawdzony i wartość.

StimulusReflex daje nam również zestaw wywołań zwrotnych, które pozwalają nam kontrolować procesy naszego odruchu:

  • before_reflex
  • around_reflex
  • after_reflex

Jak widać, nazewnictwo jest bardzo podobne do wywołań zwrotnych Active Record.

Deklarowanie Reflex w HTML z atrybutem data

Najszybszym sposobem na włączenie akcji Reflex jest użycie opcji data-reflex atrybut. Składnia jest zgodna z formatem Stimulus: [DOM-event]->[ReflexClass]#[action]

"="">Dokumentacja StimulusReflex. Podziękowania dla wszystkich osób zaangażowanych w rozwój StimulusReflex!

W tym przykładzie data-reflex atrybut wskazywał na PostRefex klasa i przyrost metoda na kliknięcie wydarzenie. Tutaj również przeszliśmy data-post-id które możemy później wykorzystać w klasie Reflex poprzez element.dataset[:post_id].

class PostsReflex < ApplicationReflex
def increment
post = Post.find(element.dataset[:post_id])

post.increment! :likes
end
end

Morfy

Domyślnie, StimulusReflex aktualizuje całą stronę (Page morph). Po ponownym przetworzeniu akcji kontrolera, wyrenderowaniu szablonu widoku i wysłaniu nieprzetworzonego kodu HTML do przeglądarki, StimulusReflex używa funkcji morfdom aby wykonać najmniejszą liczbę modyfikacji DOM niezbędnych do odświeżenia interfejsu użytkownika w ciągu zaledwie kilku milisekund.

StimulusReflex oferuje trzy różne tryby działania:

Page Morph - wykonuje aktualizację całostronicową,
Selektor Morph - zastępuje zawartość elementu,
Nic Morph - wykonuje funkcje, które nie aktualizują strony (na przykład wywołanie pracownika).

Aby zmienić nasze PostReflex#increment możemy po prostu użyć metody morf i wybierz część, którą chcemy zaktualizować.

def increment
post = Post.find(element.dataset[:post_id])
post.increment! :likes

morph "#posts_#{post.id}", render(partial: 'post', locals: { posts: post })
end

Moje przemyślenia

To dość krótkie wprowadzenie wystarczy, aby rozpocząć swoją przygodę z reaktywnymi Railsami. StimulusReflex. Czy to nie wspaniałe móc stworzyć reaktywną aplikację SPA za pomocą zaledwie kilku linii Ruby i bez JavaScript? Dla mnie cały ten pomysł HTML over-the-wire jest ekscytujący i na pewno zagłębię się w ten temat w przyszłości. Na razie gorąco polecam Dokumentacja StimulusReflex. Podziękowania dla wszystkich osób zaangażowanych w rozwój StimulusReflex!

Czytaj więcej:

Dlaczego (prawdopodobnie) powinieneś używać Typescript

Jak nie zabić projektu złymi praktykami kodowania?

Strategie pobierania danych w NextJS

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polska

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

    pl_PLPolish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek pl_PLPolish