Vue3.2 setup syntax sugar summary

Vue3.2 setup syntax sugar summary

In Vue3.2, you only need to add the setup attribute to the script tag. You can use the template directly without return. It's very fragrant!

最后更新 5/19/2022 6:47 AM
玲小叮当
预计阅读 6 分钟
分类
front end
标签
Vue

preface

提示:Vue3.2 版本开始才能使用语法糖!

Vue3.0 中变量必须 return 出来,template中才能使用;而在 Vue3.2 中只需要在 script 标签上加上 setup 属性,无需 returntemplate 便可直接使用,非常的香啊!

提示:以下是本篇文章正文内容,下面案例可供参考

1. How to use setup syntax sugar

只需在 script 标签上写上setup

The code is as follows (example):

<template>
</template>
<script setup>
</script>
<style scoped lang="less">
</style>

2. Use of data

由于 setup 不需写 return,所以直接声明数据即可

The code is as follows (example):

<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>

3. Use of method method

The code is as follows (example):

<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>

4. Use of watchEffect

The code is as follows (example):

<script setup>
import {
  ref,
  watchEffect,
} from 'vue'

let sum = ref(0)

watchEffect(()=>{
  const x1 = sum.value
  console.log('watchEffect所指定的回调执行了')
})
</script>

5. Use of watch

The code is as follows (example):

<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>

6. Use of computed computing attributes

There are two ways to write computed computing attributes (abbreviated and full writing considering reading and writing)

The code is as follows (example):

<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>

7. Use of props parent-child value transfer

The subcomponent code is as follows (example):

<template>
  <span>{{props.name}}</span>
</template>

<script setup>
  import { defineProps } from 'vue'
  // 声明props
  const props = defineProps({
    name: {
      type: String,
      default: '11'
    }
  })
  // 或者
  //const props = defineProps(['name'])
</script>

The parent component code is as follows (example):

<template>
  <child :name='name'/>
</template>

<script setup>
    import {ref} from 'vue'
    // 引入子组件
    import child from './child.vue'
    let name= ref('小叮当')
</script>

8. Use of emit parent-passed values

The subcomponent code is as follows (example):

<template>
   <a-button @click="isOk">
     确定
   </a-button>
</template>
<script setup>
import { defineEmits } from 'vue';

// emit
const emit = defineEmits(['aboutExeVisible'])
/**
 * 方法
 */
// 点击确定按钮
const isOk = () => {
  emit('aboutExeVisible');
}
</script>

The parent component code is as follows (example):

<template>
  <AdoutExe @aboutExeVisible="aboutExeHandleCancel" />
</template>
<script setup>
import {reactive} from 'vue'
// 导入子组件
import AdoutExe from '../components/AdoutExeCom'

const data = reactive({
  aboutExeVisible: false,
})
// content组件ref


// 关于系统隐藏
const aboutExeHandleCancel = () => {
  data.aboutExeVisible = false
}

</script>

9. Get the subcomponent ref variable and defineExpose exposure

That is, the method in vue2 is to obtain the ref of a child component and directly control the child component methods and variables in the parent component.

The subcomponent code is as follows (example):

<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>

The parent component code is as follows (example):

<template>
    <button @click="onClickSetUp">点击</button>
    <Content ref="content" />
</template>

<script setup>
import {ref} from 'vue'

// content组件ref
const content = ref('content')
// 点击设置
const onClickSetUp = ({ key }) => {
   content.value.modelVisible = true
}

</script>
<style scoped lang="less">
</style>

10. Use of routing useRoute and useRouter

The code is as follows (example):

<script setup>
  import { useRoute, useRouter } from 'vue-router'

  // 声明
  const route = useRoute()
  const router = useRouter()

  // 获取query
  console.log(route.query)
  // 获取params
  console.log(route.params)

  // 路由跳转
  router.push({
      path: `/index`
  })
</script>

11. Use of store warehouse

The code is as follows (example):

<script setup>
  import {useStore} from 'vuex' import {num} from '../store/index' const store =
  useStore(num) // 获取Vuex的state console.log(store.state.number) //
  获取Vuex的getters console.log(store.state.getNumber) // 提交mutations
  store.commit('fnName') // 分发actions的方法 store.dispatch('fnName')
</script>

12. Support from await

You can use await directly in setup syntax sugar. You don't need to write async, setup will automatically become async setup

The code is as follows (example):

<script setup>
  import Api from '../api/Api' const data = await Api.getData()
  console.log(data)
</script>

13. Provide and inject ancestral values

The parent component code is as follows (example):

<template>
  <AdoutExe />
</template>

<script setup>
  import { ref,provide } from 'vue'
  import AdoutExe from '@/components/AdoutExeCom'

  let name = ref('Jerry')
  // 使用provide
  provide('provideState', {
    name,
    changeName: () => {
      name.value = '小叮当'
    }
  })
</script>

The subcomponent code is as follows (example):

<script setup>
  import {inject} from 'vue' const provideState = inject('provideState')
  provideState.changeName()
</script>

summary

Tip: Here is a summary of the article:

For example: The above is a summary of how I found a blog or something to learn setup syntax sugar. It can be achieved if I wrote something wrong or my method is used incorrectly, everyone tells me, I will correct it immediately! If you think the articles I wrote can be very practical, you are welcome to like, collect and pay attention to bloggers and not get lost! If you are not busy with work, you will continue to update it! Welcome everyone to read other articles by Tinker Bell ~

Keep Exploring

延伸阅读

更多文章
同标签 11/6/2024

Why is my blog site back in Blazor?

The blog website has gone through hardships in development. It has tried nearly 10 versions such as MVC, Vue, and Go. Now it has returned to Blazor and adopts static SSR. The speed has skyrocketed and it has been successfully launched.

继续阅读
同标签 10/16/2023

NET Toolbox: An open source, free pure front-end tool website that takes you to explore the top 10 tool categories and 73 real-time online widgets

The Dotnet Toolkit is a pure front-end, open source and free tool website. Over the weekend, I referred to the open source project it-tools, Chinese-transformed the website interface text, and redeployed the website. The website has a total of 10 tool categories and provides 73 real-time online widgets. The Dotnet toolbox developed using Vue3 has unique features. This article introduces some of these featured tools in detail and briefly shares how to deploy your own tool website. If you are interested in tool websites, come and learn about the Dotnet Toolkit!

继续阅读