LoginSignup
0
0

More than 3 years have passed since last update.

Vue の props で、function を使って default の値を決める

Last updated at Posted at 2020-07-10

小技紹介

props のバリデーション要素に function が使えることがわかって嬉しかった話

どういうこと?

例えば、日付を表示するだけのコンポーネントがあったとする

./src/Day.vue
<template>
  <p class="day-font"> {{ date }}
</template>

<script>
export default  {
  data() {
    return: {
      date: 0
    }
  },

  created() {
    this.date = new Date().getDate()
  }
}
</script>
./src/app.vue
<template>
  <day />
</template>

<script>
import day import "./Day"

export default {
  components: {
    Day
  }
}
</script>

こんな感じになる。

もう少しそれっぽく書くと

./src/Day.vue
<template>
  <p> {{ day }}
</template>

<script>
export default  {
  props: {
    date: {
      type: Number,
      required: true
    }
  }
}
</script>
./src/app.vue
<template>
  <day :date="date" />
</template>

<script>
import day import "./Day"

export default {
  components: {
    Day
  },

  data() {
    return: {
      date: 0
    }
  },

  created() {
    this.date = new Date().getDate()
  }
}
</script>

こんな感じになる。

props を渡さないといけない状態になる。
つまり、当日日付を親側で与えないといけないのである。

日付を司っているのは、Day コンポーネントで、
App コンポーネントは、日付を司っていない。

App が他に日付操作を行うのであれば、問題はないと思うが、単に Day コンポーネントを呼んで、
当日日付を表示したいだけ、であれば、 App コンポーネントで Date オブジェクトの操作を行うのは避けたい。

function を使って解決

./src/Day.vue
<template>
  <p> {{ day }}
</template>

<script>
export default  {
  props: {
    date: {
      type: Number,
      required: true
      default: function() {
        return new Date().getDate()
      }
    }
  }
}
</script>
./src/app.vue
<template>
  <day />
</template>

<script>
import day import "./Day"

export default {
  components: {
    Day
  }
}
</script>

ずいぶんとスマートになったのではないだろうか。

「date は必須ではない、ただ何も定義しなかった場合、当日日付を返却する。」

という非常に使い勝手の良いコンポーネントに進化した。

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