はじめに
注:Vue3.2 バージョンから構文糖が利用可能です!
Vue3.0 では変数を return しなければ template で使用できませんでしたが、Vue3.2 では script タグに setup 属性を付けるだけで return 不要で template で直接使用でき、非常に便利です!
注:以下は本記事の本文です。下記の例を参考にしてください。
一、setup 構文糖の使い方
script タグに setup を記述するだけです。
コード(例):
<template>
</template>
<script setup>
</script>
<style scoped lang="less">
</style>
二、data データの使用
setup では return を記述する必要がないため、直接データを宣言します。
コード(例):
<script setup>
import {
ref,
reactive,
toRefs,
} from 'vue'
const data = reactive({
patternVisible: false,
debugVisible: false,
aboutExeVisible: false,
})
const content = ref('content')
// toRefsで分割代入
const { patternVisible, debugVisible, aboutExeVisible } = toRefs(data)
</script>
三、method メソッドの使用
コード(例):
<template >
<button @click="onClickHelp">システムヘルプ</button>
</template>
<script setup>
import {reactive} from 'vue'
const data = reactive({
aboutExeVisible: false,
})
// ヘルプをクリック
const onClickHelp = () => {
console.log(`システムヘルプ`)
data.aboutExeVisible = true
}
</script>
四、watchEffect の使用
コード(例):
<script setup>
import {
ref,
watchEffect,
} from 'vue'
let sum = ref(0)
watchEffect(()=>{
const x1 = sum.value
console.log('watchEffectで指定したコールバックが実行されました')
})
</script>
五、watch の使用
コード(例):
<script setup>
import {
reactive,
watch,
} from 'vue'
// データ
let sum = ref(0)
let msg = ref('こんにちは')
let person = reactive({
name:'張三',
age:18,
job:{
j1:{
salary:20
}
}
})
// 2種類の監視形式
watch([sum,msg],(newValue,oldValue)=>{
console.log('sumまたはmsgが変更されました',newValue,oldValue)
},{immediate:true})
watch(()=>person.job,(newValue,oldValue)=>{
console.log('personのjobが変更されました',newValue,oldValue)
},{deep:true})
</script>
六、computed 算出プロパティの使用
computed 算出プロパティには2つの書き方があります(短縮形と読み書きを考慮した完全形)。
コード(例):
<script setup>
import {
reactive,
computed,
} from 'vue'
//データ
let person = reactive({
firstName:'小',
lastName:'叮当'
})
// 算出プロパティの短縮形
person.fullName = computed(()=>{
return person.firstName + '-' + person.lastName
})
// 完全な書き方
person.fullName = computed({
get(){
return person.firstName + '-' + person.lastName
},
set(value){
const nameArr = value.split('-')
person.firstName = nameArr[0]
person.lastName = nameArr[1]
}
})
</script>
七、props 親子間の値の受け渡し
子コンポーネントのコード(例):
<template>
<span>{{props.name}}</span>
</template>
<script setup>
import { defineProps } from 'vue'
// propsの宣言
const props = defineProps({
name: {
type: String,
default: '11'
}
})
// または
// const props = defineProps(['name'])
</script>
親コンポーネントのコード(例):
<template>
<child :name='name'/>
</template>
<script setup>
import {ref} from 'vue'
// 子コンポーネントのインポート
import child from './child.vue'
let name= ref('小叮当')
</script>
八、emit 子から親への値の受け渡し
子コンポーネントのコード(例):
<template>
<a-button @click="isOk">
確定
</a-button>
</template>
<script setup>
import { defineEmits } from 'vue';
// emit
const emit = defineEmits(['aboutExeVisible'])
/**
* メソッド
*/
// 確定ボタンをクリック
const isOk = () => {
emit('aboutExeVisible');
}
</script>
親コンポーネントのコード(例):
<template>
<AdoutExe @aboutExeVisible="aboutExeHandleCancel" />
</template>
<script setup>
import {reactive} from 'vue'
// 子コンポーネントのインポート
import AdoutExe from '../components/AdoutExeCom'
const data = reactive({
aboutExeVisible: false,
})
// contentコンポーネントのref
// システム非表示関連
const aboutExeHandleCancel = () => {
data.aboutExeVisible = false
}
</script>
九、子コンポーネントのref変数の取得とdefineExposeによる公開
Vue2で子コンポーネントのrefを取得し、親コンポーネントから子のメソッドや変数を制御する方法に相当します。
子コンポーネントのコード(例):
<template>
<p>{{data }}</p>
</template>
<script setup>
import {
reactive,
toRefs
} from 'vue'
/**
* データ部分
* */
const data = reactive({
modelVisible: false,
historyVisible: false,
reportVisible: false,
})
defineExpose({
...toRefs(data),
})
</script>
親コンポーネントのコード(例):
<template>
<button @click="onClickSetUp">クリック</button>
<Content ref="content" />
</template>
<script setup>
import {ref} from 'vue'
// contentコンポーネントのref
const content = ref('content')
// 設定をクリック
const onClickSetUp = ({ key }) => {
content.value.modelVisible = true
}
</script>
<style scoped lang="less">
</style>
十、ルーティング useRoute と useRouter の使用
コード(例):
<script setup>
import { useRoute, useRouter } from 'vue-router'
// 宣言
const route = useRoute()
const router = useRouter()
// queryの取得
console.log(route.query)
// paramsの取得
console.log(route.params)
// ルーティング遷移
router.push({
path: `/index`
})
</script>
十一、ストア(vuex)の使用
コード(例):
<script setup>
import {useStore} from 'vuex' import {num} from '../store/index' const store =
useStore(num) // Vuexのstateを取得 console.log(store.state.number) //
Vuexのgettersを取得 console.log(store.state.getNumber) // mutationsをコミット
store.commit('fnName') // actionsをディスパッチ store.dispatch('fnName')
</script>
十二、await のサポート
setup 構文糖の中では await を直接使用できます。async を記述する必要はなく、setup は自動的に async setup になります。
コード(例):
<script setup>
import Api from '../api/Api' const data = await Api.getData()
console.log(data)
</script>
十三、provide と inject による祖父母・孫間の値の受け渡し
親コンポーネントのコード(例):
<template>
<AdoutExe />
</template>
<script setup>
import { ref,provide } from 'vue'
import AdoutExe from '@/components/AdoutExeCom'
let name = ref('Jerry')
// provideを使用
provide('provideState', {
name,
changeName: () => {
name.value = '小叮当'
}
})
</script>
子コンポーネントのコード(例):
<script setup>
import {inject} from 'vue' const provideState = inject('provideState')
provideState.changeName()
</script>
まとめ
注:ここで記事をまとめます。
例:以上が、私がブログなどで学習した setup 構文糖のまとめです。プロジェクトで使用して実現可能であることを確認しています。もし間違いや使い方の誤りがあれば教えてください。すぐに修正します!もし記事が役に立つと感じていただけたら、いいね、コレクション、フォローをお願いします。フォローしていただければ迷いません!仕事が忙しくなければ、継続的に更新します!小叮当の他の記事もぜひご覧ください〜