服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - vue.js - Vue3 学习笔记—Script Setup 语法糖用了才知道有多爽

Vue3 学习笔记—Script Setup 语法糖用了才知道有多爽

2021-12-15 23:21前端人 vue.js

script setup是 vue3 的新语法糖,并不是新增的功能模块,只是简化了以往的组合式 API 必须返回(return)的写法,并且有更好的运行时性能。

Vue3 学习笔记—Script Setup 语法糖用了才知道有多爽

刚开始使用 script setup 语法糖的时候,编辑器会提示这是一个实验属性,要使用的话,需要固定 vue 版本。

在 6 月底,该提案被正式定稿,在 v3.1.3 的版本上,继续使用但仍会有实验性提案的提示,在 V3.2 中,才会去除提示并移除一些废弃的 API。

script setup 是啥?

script setup 是 vue3 的新语法糖,并不是新增的功能模块,只是简化了以往的组合式 API 必须返回(return)的写法,并且有更好的运行时性能。

写法简便:

  1. <script setup> 
  2. ... 
  3. </script> 

使用 script setup 语法糖时,内部的属性或方法可以直接使用,无需 return 返回;引入子组件可以自动注册,无需 components 注册可直接使用等等,接下来介绍 script setup 语法糖具体使用以及与 setup() 函数的区别。

1、属性和方法无需返回,可直接使用

setup() 来写组合式 API 时,内部定义的属性和方法,必须使用 return 暴露到上下文,外部才能够使用,否则就会报错,写法为:

  1. <template> 
  2.  {{todoList}} 
  3. </template> 
  4. <script> 
  5. export default { 
  6.  setup(){ 
  7.   let todoList = [ 
  8.    {todo:"我想看海",isCheck:false}, 
  9.    {todo:"我想浪漫",isCheck:true}, 
  10.   ] 
  11.   return
  12.    todoList, 
  13.   } 
  14.  } 
  15. </script> 

使用 script setup 语法糖,不需要 return 和 setup函数,只需要全部定义到 script setup 内。

可以简化上述代码为:

  1. <template> 
  2.  {{todoList}} 
  3. </template> 
  4. <script setup> 
  5.  let todoList = [ 
  6.   {todo:"我想看海",isCheck:false}, 
  7.   {todo:"我想浪漫",isCheck:true}, 
  8.  ] 
  9. </script> 

2、组件自动注册

在 script setup 语法糖中,引入的组件可以自动注册,不需要再通过 components 进行注册,而且无法指定当前组件的名字,会自动以文件名为主,省去了 name 属性。

  1. <template> 
  2.  <SetUp></SetUp> 
  3.  <set-up></set-up> 
  4. </template> 
  5. <script setup> 
  6.  import SetUp from "./SetUp.vue" 
  7. </script> 

而在 setup() 写的组合式 API 中,引入的组件必须在 components 内注册之后才能使用,否则无法正常引入。

3、组件数据传递

父组件给子组件传值时,需要 props 接收。setup( props, context )接收两个参数,props 接收传递的数据,使用 setup() 接收数据如下:

  1. <template> 
  2.  {{ a }} {{ b }} 
  3. </template> 
  4.  
  5. <script> 
  6. import { toRefs } from "vue" 
  7. export default { 
  8.  setup(props,context){ 
  9.   const { a,b } = toRefs(props) 
  10.   return { 
  11.    a, 
  12.    b 
  13.   } 
  14.  } 
  15. </script> 

而 script setup 语法糖接收 props 中的数据时,使用 defineProps 方法来获取,可以修改上述代码为:

  1. <template> 
  2.  {{ a }} {{ b }} 
  3. </template> 
  4.  
  5. <script setup> 
  6. import { toRefs } from "vue" 
  7. const props = defineProps({ 
  8.   a: String, 
  9.   b: String 
  10. }) 
  11. const { a, b } = toRefs( props ) 
  12. </script> 

4、获取 attrs、slots 和 emits

setup( props, context )接收两个参数,context 上下文环境,其中包含了属性、插槽、自定义事件三部分。

setup() 内获取如下:

  1. setup(props,context){ 
  2.  const { attrs, slots, emit } = context 
  3.  // attrs 获取组件传递过来的属性值, 
  4.  // slots 组件内的插槽 
  5.  // emit 自定义事件 子组件 

使用 script setup 语法糖时,

  • useAttrs 方法 获取 attrs 属性
  • useSlots 方法获取 slots 插槽
  • defineEmits 方法获取 emit 自定义事件
  1. <script setup> 
  2.  import { useAttrs, useSlots } from 'vue' 
  3.  const slots = useSlots(); 
  4.  const attrs = useAttrs(); 
  5.  
  6.  const emits = defineEmits(['getChild']); 
  7. </script> 

5、对外暴露属性

script setup 语法糖的组件默认不会对外暴露任何内部声明的属性。如果有部分属性要暴露出去,可以使用 defineExpose。

子组件暴露属性:

  1. <template> 
  2.  {{msg}} 
  3. </template> 
  4.  
  5. <script setup> 
  6. import { ref } from 'vue' 
  7.  
  8. let msg = ref("Child Components"); 
  9.  
  10. // defineExpose无需导入,直接使用 
  11. defineExpose({ 
  12.  msg 
  13. }); 
  14. </script> 

父组件引用子组件暴露的属性:

  1. <template> 
  2.  <Child ref="child" /> 
  3. </template> 
  4.  
  5. <script setup> 
  6. import { ref, onMounted } from 'vue' 
  7. import Child from './components/Child.vue' 
  8.  
  9. let child = ref(null); 
  10.  
  11. onMounted(() => { 
  12.  console.log(child.value.msg); // Child Components 
  13.  console.log(child.value.num); // 123 
  14. }) 
  15. </script> 

原文链接:https://www.toutiao.com/a7033663484797796877/

延伸 · 阅读

精彩推荐
  • vue.jsVue如何实现变量表达式选择器

    Vue如何实现变量表达式选择器

    这篇文章主要介绍了Vue如何实现变量表达式选择器,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下...

    紫圣6642022-01-20
  • vue.jsvue 页面跳转的实现方式

    vue 页面跳转的实现方式

    这篇文章主要介绍了vue 页面跳转的实现方式,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下...

    青小记11712021-12-30
  • vue.js详解vue 表单绑定与组件

    详解vue 表单绑定与组件

    这篇文章主要介绍了vue 表单绑定与组件的相关资料,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下...

    Latteitcjz5582022-02-12
  • vue.jsvue-cli中实现响应式布局的方法

    vue-cli中实现响应式布局的方法

    这篇文章主要介绍了vue-cli中实现响应式布局的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    我叫胡八一5402022-01-25
  • vue.jsVue自定义v-has指令实现按钮权限判断

    Vue自定义v-has指令实现按钮权限判断

    这篇文章主要给大家介绍了关于Vue自定义v-has指令实现按钮权限判断的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    OrzR34552022-03-02
  • vue.jsvue中配置scss全局变量的步骤

    vue中配置scss全局变量的步骤

    这篇文章主要介绍了vue中配置scss全局变量的步骤,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...

    吃火鸡的馒头4452021-12-21
  • vue.js基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能

    基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能

    这篇文章主要介绍了基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一...

    前端小白菜~5082021-12-27
  • vue.jsvue实现拖拽进度条

    vue实现拖拽进度条

    这篇文章主要为大家详细介绍了vue实现拖拽进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    前端菜鸡日常6312022-01-24