LoginSignup
5
2

More than 1 year has passed since last update.

Vue3 <script setup> 構文でpops/emitをTypescriptで書いてみた。

Posted at

現在、Nuxt3, Vue3, TypeScriptsで開発をしております。

私は、今までのNuxtやVueを使っていたわけではなく、Nuxt3を初めて使い、初めてvueを書き始めたので、setup構文でpropsやemitを書く際、どのように受け渡しをするのか、初めは書き方がわからなかっため、初めてnuxtやvueを使ってるよという人のために書いていきます。

そもそも,「props」とは?

一言で言うと、親コンポーネントの値を伝えるもの。

そもそも,「emit」とは?

・親コンポーネントの関数を使えるようにするもの。
・子コンポーネントの値を親に伝えるもの。

ここまでの説明で、わからないことがある方は、一旦必要になるまで温めるか、props, emitに関して、もう少し理解を深めた方がいいかもしれません。
ここでは、書き方をメインしているので、理解が浅いままでは、今後応用する際、混乱してしまう可能性があります。
理解してコードを書くことはとても大切ですので、ある程度理解して、使う前段階で見ていただくといいかもしれません。

書き方を貼っていきます。

親コンポーネント

<script setup lang="ts">

const alertDo = ():  void => {
 alert('クリックされたよ。');
}

</script>

<template>
  <div class="btn-content">
  // ここで値を渡す。
    <Btn 
      // propsへ
      :icon="'dog'"
      :size="'mini'"
      // emitsへ
      @alertDooo="alertDo()"
    />
  </div>
</template>

子コンポーネント

<script setup lang="ts">
type Icon = 'dog' | 'panda' | 'rabbit' ;
type Size = 'mini' | 'normal' | 'big' ;

/**
 * Props
 */
const props = withDefaults(defineProps<{
  // 型定義
  size: Size
  icon: Icon
}>(), {
  // 初期値設定
  size: 'normal',
  icon: 'none',
});

/**
 * Emits
 */
interface Emits {
  // 関数名, 引数の型, 返り値の型
  (e: 'alertDooo', v: null): void;
}

const emits = defineEmits<Emits>();
// 以下のようにも書けます。
const emits = defineEmits<{
  (e: 'alertDooo', v: null): void;
}>()

// 使用時は、
// emits('alertDooo', 渡したい引数またここでは、null);
</script>

補足

const props = 
    withDefaults(
    defineProps<{}>(),
    {}
    );

withDefaultsヘルパーはデフォルト値の型チェックを行う。
型のみの場合は、以下のように書く。
defineProps<{
      size: Size
      icon: Icon
}>(),

emitsに引数を渡すことで、子コンポーネントの値を親に伝えることができます。
簡易的ですが、今回はここで終わりです。

propsとemitを使った親子3代バケツリレー、かつ孫でinputを使っていてその値を運ぶパターンを今度あげます。

5
2
1

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