1 <template> 2 <div id="app"> 3 <div class="todo-main"> 4 <input type="text" v-model="inputVal" /> 5 <button @click="addVal">添加</button> 6 <ul> 7 <li v-for="(item, index) in todolist" :key="index"> 8 {{ item }} 9 <button @click="deleteVal(index)">删除</button> 10 </li> 11 </ul> 12 共有:{{ todolist.length }}条数据 13 </div> 14 </div> 15 </template> 16 17 <script lang="ts"> 18 import { reactive, toRefs,onMounted } from "vue"; 19 interface DataProps { 20 todolist: string[]; 21 inputVal: string; 22 deleteVal: (index: number) => void; 23 addVal: () => void; 24 } 25 export default { 26 setup() { 27 const data: DataProps = reactive({ 28 inputVal: "", 29 todolist: ["参加需求评审会", "完善新增逻辑"], 30 addVal: () => { 31 data.todolist.push(data.inputVal); 32 data.inputVal = ""; 33 }, 34 deleteVal: (index: number) => { 35 data.todolist.splice(index, 1); 36 }, 37 }); 38 const refData = toRefs(data); 39 onMounted(() => console.log('组件已加载!')) 40 return { 41 ...refData, 42 }; 43 }, 44 }; 45 </script>