<template> <div id="app"> <p>姓名:{{name}}</p> <p> <button @click="changeAge(-1)">-</button> 年齡:{{age}} <button @click="changeAge(1)">+</button> </p> <p> 出生年份: <button @click="changeYear(-1)">-</button> {{year}} <button @click="changeYear(1)">+</button> </p> </div> </template> <script> import { ref, computed, reactive,toRefs,watch } from "vue"; export default { name: "app", data() { return { name: "xiaosan", }; }, setup(props,context) { // props 獲取組建中定義的props // context props:{ title:String } const data = reactive({ // 建立一個響應式對象 name: "小四", age: 18, year: computed({ get: () => { return 2020 - data.age; }, set: (val) => { data.age = 2020 - val; }, }), }); function changeAge(val) { data.age += val; //想改變值或獲取值 必須.value console.log(props.title) } watch(()=>props.title,(newTitle,oldTitle)=>{ console.log(newTitle,oldTitle) context.emit('title-changed') }), function changeYear(val) { data.year = data.year + val; } return { //必須返回 模板中才能使用 ...toRefs(data),//講響應式的對象變為普通對象 在家。。。結構,在模板中就可以直接使用屬性,不用data.name changeAge, changeYear, }; }, }; </script>