script setup

This commit is contained in:
朱进禄 2022-03-14 15:48:14 +08:00
parent cd3b2634a4
commit ad97d0ee80

View File

@ -166,6 +166,56 @@ toRefs的作用就是把一个响应式对象, 转化为普通对象, 但是同
这也会导致它变得十分冗长
但是它本身作为一个函数, 其中定义的都是这个函数当中的局部变量
这就提供了一种拆分的可能 (在vue2当中, 要对组件内的功能进行拆分, 可以使用mixin)
```javascript
import { ref } from 'vue'
const obj = ref({count:1, name:"123"})
const valueChange = () => {
obj.value.count = obj.value.count + 1
obj.value.name = "456"
}
export default {obj, valueChange}
```
在组件当中直接这样使用即可
```javascript
import demo from './demo'
export default {
name: 'App',
setup() {
return{ ...demo }
},
}
```
### script setup
如果采用了setup, 其他的选项其实已经基本不再需要, 所以vue3支持以一种更加扁平化的方式来编写代码
也就是在script标签上添加setup属性
```html
<script setup>
import { ref } from 'vue'
import HelloWorld from './components/HelloWorld.vue'
const obj = ref({count:1, name:"123"})
const valueChange = () => {
obj.value.count = obj.value.count + 1
obj.value.name = "456"
}
</script>
```
此时script当中的所有代码, 就相当于之前setup当中的内容, 引入的组件也不再需要进行声明了, 直接使用即可
#### 属性与事件的声明
如果采用了`script setup`这种形式, 会发现没有办法像上面那样从setup函数的入参上获取props和context了
这种情况下我们可以使用`defineProps``defineEmits`
```html
<script setup>
const props = defineProps({msg: String})
const emits = defineEmits(['change', 'visible'])
emits('visible', '456')
</script>
```
## 关于sass