もしかしたら解決済みかもしれませんが・・・
Propsでは親から子にプロパティ・値を渡すとありますが、それ以前の状態について子・親のどちらにどのように書くべきなのか悩んでいます。
propsで渡すということは親でデータを管理してあげるのが良いかと思います。
子で管理するものはない、または「値が設定されていない時に表示されるデフォルト値」のみを管理するのが理想です。(今回この話は省略します)
その上で・・・初期値というのは一番最初の値ですので
const changedMessage = ref("発火前")
ここがこのようになります。
その上で・・・今回やりたいことは「クリックしたらテキストを変更する」だと思いますので、クリックのイベントを作ってあげる必要があります。
まずは親ですが
<script setup>
import Message from './Message.vue'
import { ref }from 'vue'
const changedMessage = ref("発火前")
const hanldeClick = () => {
changedMessage.value = '発火済'
}
</script>
<template>
<Message :msg="changedMessage" @click="hanldeClick" />
</template>
このように
- propsでメッセージを渡す
- emitでイベントを渡す
という情報を子のコンポーネントへ渡してあげる必要があります。
hanldeClickを実行すると
changedMessage.value = '発火済'
としているので、changedMessage
の中身が発火前
から発火済
に切り替わります。
あとはこれを子で使えるようにするだけです。(普段TypeScriptで書くのでJavaScriptでの書き方が分からず、間違ってるかもしれません)
https://vuejs.org/api/sfc-script-setup.html#defineprops-defineemits
<script setup>
const props = defineProps({
msg:String
})
const emit = defineEmits(['click'])
</script>
<template>
<h1>練習</h1>
<button @click="() => emit('click')" >{{ msg }}</button>
</template>
こうするとbuttonをクリックするとMessage.vueに渡ってきた@clickが実行されるようになり、
App.vueのhanldeClickが実行されるので文字が切り替わるようになります。