10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ざっくり】コンポーネント指向ってなに?【Vue.js】

Posted at

はじめに

単一ファイルコンポーネントでの実装を想定してます。
以下のような読者を想定してます。

  • Vue.jsってどういう言語なの?
  • コンポーネント指向?聞いたことはあるけどよくわからん
  • コンポーネント指向はわかるけど、なにが嬉しいの?

コンポーネントとは?

「部品」
「構成要素」
という意味の言葉。

Vue.jsでは、「機能ごとにJavaScriptとテンプレートをセットしたパーツ」のことを指します。
テンプレートは、HTMLとCSSによって構成されます。

ログイン機能のコンポーネントがあるとしたら…

  • JavaScript
    • ログインボタンが押された時、入力されたIDとパスワードを持ったユーザが存在するかチェックする
    • ユーザが存在する場合、ログイン処理を行う
    • ユーザが存在しない場合、エラーメッセージを表示する
  • テンプレート
    • ID入力フォーム
    • パスワード入力フォーム
    • ログインボタン
    • エラーメッセージ表示エリア

みたいな感じになります。

「ログインをする」という一つの機能に対して、必要なものを全てまとめた部品ですね。

コンポーネント指向とは?

たくさんのコンポーネントを作って、それを組み合わせることで一つのアプリケーションを作りあげようという考え方です。

利点

  • 一度コンポーネントにしてしまえば何度でも使える!
    • 違うアプリケーションでも同じものが使える
  • 処理する部分と見た目を定義する部分のソースコードが近い位置にあるから分かりやすい!

単一ファイルコンポーネント

Vue.jsに用意されたコンポーネント指向を助ける仕組みです。
HTML、CSS、JavaScriptを一つのファイルにまとめて書き、拡張子に「.vue」をつけることで単一ファイルコンポーネントの実装ができます。

じゃあコンポーネントごとにJSやCSSを書かないといけないの?というとそういうわけではありません。
「.vue」という拡張子のファイルであっても、今までと同じように外部で宣言された「JSファイル」、「CSSファイル」を読み込むこともできます。
なので、複数のコンポーネントで呼び出されるような汎用的なJS処理、CSSはそれぞれ外部に宣言しておけます。

コンポーネントの使いかた

コンポーネントはHTMLタグのように呼び出せます。

例えばログインコンポーネントであれば
<login />
というように書きます。

また、コンポーネントには値を渡す事ができます。
渡す値によって、同じコンポーネントであっても柔軟な処理を行わせる事ができます。

楽曲の検索機能の実装で例えると
「曲名」を入力させて検索するコンポーネント
<songSearch searchTarget="song_title" />
「アーティスト」を入力させて検索するコンポーネント
<songSearch searchTarget="artist" />
という実装方法になります。

これによって内部の処理を使いまわす事ができ、効率的な開発を行う事ができます。

どんな単位でコンポーネントにすればいいのかわからない…

コンポーネント化の粒度の指標として「アトミックデザイン」というものがあります。
迷ったら参考にしてみるのも良いのではないでしょうか。

参考

コンポーネントの基本 — Vue.js
フロントエンドのコンポーネント設計に立ち向かう - Qiita
基礎から学ぶ Vue.js

10
8
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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?