Stimulus
HTML中心主義的で、JSONをやり取りするとかレンダリングをどうこうするとかでは全然ない
HTMLを増強するもの
最初独立したフレームワークとして登場し、後にHotwireが発表されたときに構成要素の一つとされた 単体でフレームワークとして使えることには変わりない
Hotwire的には、基本的にTurboで大体のことをやるが、それでも足りない時にStimulusを使う HotwireやTurboもHTMLを中心に考えている
使い方
HTMLにdata-controllerattirubuteを付けることで、jsで実装したcontrollerと接続する
HTMLとCSSがclassによって接続されるのと同じように、data-controllerによってHTMLとJSが接続されると考えるといいそうだ
controllerとの紐付けについて
stimulus-railsを使っている場合はファイル名で行う
下の例だと、hello_controller.jsとHTMLのdata-controller="hello"が対応している
その他の場合は@hotwired/stimulusからimportしたapplicationインスタンスにregisterするとかだが、割愛
data-actionでDOMのeventからメソッドを呼ぶ
code:html
<div data-controller="hello">
<input type="text">
<button data-action="click->hello#greet">Greet</button>
</div>
code:src/controller/hello_controller.js
import { Controller } from "stimulus"
export default class extends Controller {
greet() {
console.log("Hello, Stimulus!", this.element)
}
}
static targets = [ "hoge" ]の話
所感
古いrailsのJSをコンポーネント化する時とかの選択肢に、なるかなあ?
Virtual DOMじゃないのは、そこはturbolinksでええやろってことかと
とはいえTurbo抜きでも設計的な恩恵は得られそうな気がする
場合によってはさらにreactに移行するために共存するのもまあできそうな気はする
classの単位がどうなるのかちょっとわからない
ちゃんと使ったことがないので
reactよりは比較的大きくなりそうな気がする
stimulusは入れ子にする感じではなさそうだから小さいclassにならなそう
ref.
使えるコンポーネントを探すというより、実装の参考にするといいと思う