# hello_vue3 **Repository Path**: codelife1224/hello_vue3 ## Basic Information - **Project Name**: hello_vue3 - **Description**: vue3学习代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-23 - **Last Updated**: 2023-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 拉开序幕的setup **setup 概述** `setup`是`vue3`中一个新的配置项,值是一个函数,它是`Composition API`"表演的舞台",组件中所有的:数据、方法、计算属性、监视等等,均配置在`setup`中 选项式(配置式)API ```javascript export default { name: 'Person',// 组件名 // 数据区 data() { return { name: '张三', age: 18, tel: '12341234' } }, // 方法区 methods: { changeName() { this.name = 'zhang-san' }, changeAge() { this.age += 1 }, showTel() { alert(this.tel) }, }, } ``` **setup写法** ```javascript export default { name: 'Person',// 组件名 beforeCreate() { console.log('beforeCreate') }, setup() { console.log('setup') // 注意 setup函数中的this是undefined,而不是vue实例,Vue3中已经弱化this了 // console.log(this) // 数据,原来是写在data中的,此时的name、age、tel都不是响应式的数据 let name = '张三' let age = 18 let tel = '123123123123' // 方法 function changeName() { console.log(1) // 注意:这样修改name,页面是没有变化的 name = 'zhang-san' console.log(name); // name确实改了,但name不是响应式的 } function changeAge() { console.log(2) age += 1 console.log(age); } function showTel() { console.log(3) alert(tel) console.log(tel); } return { name, age, changeName, changeAge, showTel } } } ``` ## setup的返回值 setup的返回值可以是**对象**也可以是**渲染函数** 渲染函数:因为可以把函数的返回值渲染到页面上 ```javascript export default{ name:'Person', //组件名 setup(){ // return {} //return function(){ // return '哈哈' //} return ()=> '哈哈' } } ``` > 注意:渲染函数没有this所以可以是箭头函数也可以是普通函数 ## setup data methods之间的关系(面试题) 1. data(){}与setup(){}可以同时存在 2. methods(){}与setup()也可以同时存在 ```javascript data() { return { a: 100 } }, methods: { b() { alert('b') } }, setup() { console.log('setup') // 注意 setup函数中的this是undefined,而不是vue实例,Vue3中已经弱化this了 // console.log(this) // 数据,原来是写在data中的,此时的name、age、tel都不是响应式的数据 let name = '张三' let age = 18 let tel = '123123123123' // 方法 function changeName() { console.log(1) // 注意:这样修改name,页面是没有变化的 name = 'zhang-san' console.log(name); // name确实改了,但name不是响应式的 } function changeAge() { console.log(2) age += 1 console.log(age); } function showTel() { console.log(3) alert(tel) console.log(tel); } return { name, age, changeName, changeAge, showTel } } ``` **总结** - vue2的选项试语法与vue3的setup语法可以共存 - 旧的语法可以读出setup语法的数据,但是setup语法里面的数据是不可以读取旧语法里面的数据 - 最好不要把vue2的旧语法和vue3的setup语法混合写 ### setup语法糖 ```javascript // 数据 let name = '张三' let age = 18 let tel = '123123123123' let address = '北京昌平区宏福苑·宏福科技园' // 方法 function changeName() { console.log(1) // 注意:这样修改name,页面是没有变化的 name = 'zhang-san' console.log(name); // name确实改了,但name不是响应式的 } function changeAge() { console.log(2) age += 1 console.log(age); } function showTel() { console.log(3) alert(tel) console.log(tel); } ``` - 对比 ```javascript ```