0
2

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.ts」を触ってみる

Last updated at Posted at 2021-03-09

概要

今までRuby、Railsしかきちんと扱ったことはなかったのですが、この度業務でVue.js + TypeScriptを使わせてもらえることになったので、どんなものかと触ってみることにしました。
同じように初めてのフロントエンドとしてVue.jsとTypeScriptを扱う方の参考になれば幸いです。

参考

vue.js + typescript = vue.ts ことはじめ
上記の記事が大変参考になりました。

Vue.tsのプロジェクトを作成しよう

早速Vueをインストールして、vue create アプリ名でプロジェクトの作成を行ったのですが、デフォルトの設定のまま作成してしまうと、TypeScriptを使えません。

image.png

image.png

Defaultではなく、Manually select features を選択して、TypeScriptの欄にチェックを入れて作成しましょう!

コンポーネントを作ってみる

image.png

プロジェクトのディレクトリ構成はこんな感じです。

手始めにTest.vueというセンスのかけらもない名前のコンポーネントを作成してみます。

コンポーネントとは?

コンポーネントとはボタンなどの小さなシステムのことを指します。このコンポーネントを多く組み合わせることで一つの大きなシステムを構築します。
srcディレクトリの配下にあるcomponentsディレクトリにvueファイルとして作成していきます。

src/components/Test.vue
<template>
    <button @click="onClick">テストボタン</button>
</template>

<script lang="ts">
    import {Component, Emit, Prop, Vue} from "vue-property-decorator";

    @Component
    export default class Test extends Vue{

      private count = 0;

      @Prop()
      public test?: string;

      @Emit()
      public click(count: number){
      }

      public onClick(){
        this.count++;
        alert("テストします");
        this.click(this.count);
      }
    }
</script>

上記のようなボタンコンポーネントを作成し

src/App.vue
<template>
    <div class="home">
      <p>テスト{{count}}回目</p>
      <p>{{testText}}</p>
      <p>
        <Test :test="testText" @click="onTestClick"></Test>
      </p>
    </div>
</template>

<script lang="ts">
    import { Component, Vue } from 'vue-property-decorator';
    import Test from "@/components/Test.vue";

    @Component({
        components: {
            Test,
    },
    })

    export default class Home extends Vue {
      private count = 0;
      public testText = "下のボタンを押してください";

      public onTestClick(count: number){
        this.count = count;
      }
    }
</script>

App.vueファイルを介して表示させます。

まず、vueファイルの基本的な構成として、templatescriptに分かれており、scriptでロジックを記述し、それをtemplateに引き渡して表示させるという形になっています。

    import Test from "@/components/Test.vue";

    @Component({
        components: {
            Test,
    },
    })

上記の箇所で、Test.vueで作成したコンポーネントをApp.vueに引っ張ってきています。

      @Prop()
      public test?: string;

      @Emit()
      public click(count: number){
      }

Propsでは親コンポーネントから値を受け取ることができます。
この例では親コンポーネントであるApp.vueからtestText = "下のボタンを押してください" というデータを受け取っています。これにより、同じPropsを用いるすべての子コンポーネントの変更をApp.vueから行うことができるようになります。

Emitでは逆に子コンポーネントから親コンポーネントに値を引き渡すことができます。

image.png

image.png

image.png

このようにクリック回数をカウントするボタンが作成できました。

終わりに

Vue.tsについてほんの少しだけ触ることができました。他のフロントエンドを触ったことがないため比較ができませんが、型定義など保守性の高いツールとのことで、今後また簡単なものを作成し、実感できればなと思っております。

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?