一、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.valueconsole.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}}})// 两种监听格式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计算属性有两种写法(简写和读写的完整写法)
<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'// 声明propsconst 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';// emitconst 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,})// 关于系统隐藏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组件refconst content = ref('content')// 点击设置const onClickSetUp = ({ key }) => {content.value.modelVisible = true}</script>
九、路由useRoute和useRouter的使用
<script setup>import { useRoute, useRouter } from 'vue-router'// 声明const route = useRoute()const router = useRouter()// 获取queryconsole.log(route.query)// 获取paramsconsole.log(route.params)// 路由跳转router.push({path: `/index`})</script>
十、store仓库的使用
<script setup>import { useStore } from 'vuex'import { num } from '../store/index'const store = useStore(num)// 获取Vuex的stateconsole.log(store.state.number)// 获取Vuex的gettersconsole.log(store.state.getNumber)// 提交mutationsstore.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')// 使用provideprovide('provideState', {name,changeName: () => {name.value = '小叮当'}})</script>
<script setup>import { inject } from 'vue'const provideState = inject('provideState')provideState.changeName()</script>
