Snelle referentie

StimulusReflex spiekbriefje

Een snelle naslaggids voor StimulusReflex in Ruby on Rails: reflex-acties, morph-modi, levenscyclus-callbacks en clientgebeurtenissen.

· Gepubliceerd

Kernconcepten

StimulusReflex maakt reactieve real-time gebruikersinterfaces in Rails-toepassingen mogelijk met WebSockets (ActionCable) en CableReady.

Basisreflex

<!-- view.html.erb -->
<button data-reflex="click->Counter#increment">Increment</button>
# app/reflexes/counter_reflex.rb
class CounterReflex < ApplicationReflex
  def increment
    @count = element.dataset[:count].to_i + 1
  end
end

Morph-modi

Page Morph (Standaard)

Rendert de hele pagina opnieuw via de controlleractie en voegt de verschillen samen in de DOM.

Selector Morph

# app/reflexes/example_reflex.rb
class ExampleReflex < ApplicationReflex
  def update_metric
    morph "#metric-display", render(partial: "metrics/metric", locals: { value: 42 })
  end
end

Nothing Morph

Voert serverlogica uit zonder de client-DOM bij te werken.

class ExampleReflex < ApplicationReflex
  def background_task
    LongRunningJob.perform_later
    morph :nothing
  end
end

Levenscyclusmethoden

Serverside callbacks

class ExampleReflex < ApplicationReflex
  before_reflex :authenticate
  around_reflex :measure_time
  after_reflex :log_activity
end

Clientside generieke callbacks

  • beforeReflex(element, reflex, noop, reflexId): Vóór het verzenden van het WebSocket-verzoek
  • reflexSuccess(element, reflex, noop, reflexId): Na uitvoering en DOM-update
  • reflexError(element, reflex, error, reflexId): Wanneer de server een onverwerkte fout genereert
  • reflexHalted(element, reflex, noop, reflexId): Wanneer reflex wordt afgebroken met throw :abort
  • afterReflex(element, reflex, noop, reflexId): Uitgevoerd bij zowel succes als falen
  • finalizeReflex(element, reflex, noop, reflexId): Definitieve opruimhook

DOM-gebeurtenissen

  • stimulus-reflex:before
  • stimulus-reflex:success
  • stimulus-reflex:error
  • stimulus-reflex:halted
  • stimulus-reflex:after
  • stimulus-reflex:connected
  • stimulus-reflex:disconnected
  • stimulus-reflex:ready

Praktische patronen

Formulierverwerking

Reflexen die binnen formulieren worden geactiveerd, serialiseren invoervelden automatisch in params.

Promise-koppeling

this.stimulate('Comments#create')
  .then(() => this.showSuccess())
  .catch((err) => this.handleError(err))

Permanente elementen

Markeer elementen met data-reflex-permanent zodat pagina-morphs ze ongemoeid laten.

<div data-reflex-permanent>
  <video id="player" src="video.mp4" controls></video>
</div>

Referenties

Verwante onderwerpen