2
1
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

ゼロから始めるstimulus入門1(ファーストコンタクト)

Last updated at Posted at 2024-06-10

はじめに

最近、railsでstimulusを使い始めました。まだまだ、使い方がよくわかっていないところがあるので、ドキュメントを読みながら1から学びたいと思います。
今回はドキュメントのhandbook通りに進んでいきます。railsで使いそうでない部分は省いています。
ドキュメントはこちら

stimulusとは

stimulusはjavascriptのフレームワークです。
Stimulusは、すでに存在する静的なHTMLやサーバーで生成されたHTMLをより便利にするために設計されているようです。
Stimulusはページを継続的に監視してHTMLのdata-controller属性が現れたら、それに対応するjsファイル(命名規則あり)と対応付けします。
難しく感じますが、今までcssでも使われるclassやidから属性を取得していたものを、data-controller属性というもので、明確にjsとhtmlのつながりを分けたというものだと思います。

stimulusは以下の3つの主要なコンセプトがあります。

  • action:data-action属性を使用してコントローラーメソッドをDOMイベントに接続
  • target:コントローラー内の重要な要素を特定
  • value:コントローラーの要素上のデータ属性を読み書きし、監視する

記述方法

stimulusを使うためには、ざっくりいうとコントローラーと属性を定義してあげればいいです。

コントローラー

stimulusではcontrollersという配下に〇〇_controller.jsというファイルを作成します。
〇〇の部分はなんでもよいですが、_controllerは必ず必要なようです。
中身はこのようになっています。
static targets = [ "name" ]は後述するHTMLでのdata-hello-targetと対応します。
connect()は初期化時に呼び出されるイメージです。
greetはメソッドです。属性部分と対応させて、console.logを表示します。
this.nameで別のメソッドを呼び出し、this.nameTarget.valueの値を取得しています。
nameはhtmlで指定された名前の部分です。指定した名前+Targetとすることで要素を指定できます。

// src/controllers/hello_controller.js
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  connect() {
    console.log("initial")
  }

  static targets = [ "name" ]
  
  greet() {
    console.log(`Hello, ${this.name}!`)
  }

  get name() {
    return this.nameTarget.value
  }
}

属性

  • data-controller属性はどのcontrollersフォルダ配下のファイルを使用するか、対応付けをします。
    data-controller="hello"はdata-controllerでhelloを指定しているので、hello_controller.jsと対応付けされます。

  • data-hello-target="name"はjs側で要素を参照するための値です。idやclassで要素を参照していたのをdata-hello-targetで取得しているイメージです。(helloはcontrollerの名前)

  • data-action="click->hello#greet"はイベントがトリガーされた際に呼ばれるメソッドを定義します。この場合はclickイベントのときに、hello_controller.jsのgreetメソッドが呼ばれます。
    click:イベント名
    hello:コントローラ識別子
    greet:呼び出すメソッドの名前

<div data-controller="hello">
  <input data-hello-target="name" type="text">
  <button data-action="click->hello#greet">Greet</button>
</div>

動作

ブラウザでページを読み込み、開発者コンソールを開き、「Greet」ボタンをクリックすると、ログメッセージが表示されます。
image.png

次回

さらにドキュメントを読み進め、まとめていこうと思います!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1