Riferimento rapido

Guida rapida a StimulusReflex

Guida di riferimento rapido a StimulusReflex in Ruby on Rails: azioni reflex, modalità morph, callback del ciclo di vita ed eventi client.

· Pubblicato

Concetti Fondamentali

StimulusReflex consente interfacce utente reattive in tempo reale nelle applicazioni Rails tramite WebSockets (ActionCable) e CableReady.

Reflex di base

<!-- 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

Modalità Morph

Page Morph (Predefinito)

Effettua nuovamente il rendering dell'intera pagina e applica le differenze al 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

Esegue logica lato server senza aggiornare il DOM del client.

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

Metodi del Ciclo di Vita

Callback lato server

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

Callback generici lato client

  • beforeReflex(element, reflex, noop, reflexId): Prima dell'invio della richiesta WebSocket
  • reflexSuccess(element, reflex, noop, reflexId): Dopo l'esecuzione del reflex e aggiornamento DOM
  • reflexError(element, reflex, error, reflexId): Quando il server genera un errore non gestito
  • reflexHalted(element, reflex, noop, reflexId): Quando il reflex viene interrotto con throw :abort
  • afterReflex(element, reflex, noop, reflexId): Eseguito sia in caso di successo che di fallimento
  • finalizeReflex(element, reflex, noop, reflexId): Hook finale di pulizia

Eventi DOM

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

Pattern Pratici

Gestione dei form

I reflex attivati su elementi del form serializzano automaticamente i valori nei params.

Concatenamento di Promise

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

Elementi Permanenti

Contrassegna gli elementi con data-reflex-permanent per preservarli durante i morph completi.

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

Riferimenti

Argomenti correlati