setup是一个组件选项,在组件被创建之前,props 被解析之后执行。它是组合式 API 的入口。
他接受两个参数:

{Data} props
{SetupContext} context

setup选项里使用computed需要手动引入computed方法,computed接受一个 getter 函数,并根据 getter 的返回值返回一个不可变的响应式 ref 对象。或者,接受一个具有 getset 函数的对象,用来创建可写的 ref 对象。下面来看示例。

父组件index.vue

<script lang="ts">
import ComputedTest from './computedTest.vue'
export default {
    components:{ComputedTest},
    setup(){
        return {
            
        }
    },
}
</script>
<template>
    <div>
        <ComputedTest name="Jack"></ComputedTest>
    </div>
</template>

子组件computedTest.vue

<script lang="ts">
import { ref,computed,toRefs } from 'vue'
interface Data {
    [key:string]:unknown
}
export default {
    props:{name:String},
    setup(props:Data){
    	//创建一个响应式变量
        const text = ref("world")
        //通过computed返回一个修改后的响应式变量,会根据text值的变化而变化
        //这里computed接受一个getter函数
        const computedText = computed(()=>"hello " + text.value)
		
		//这里computed接受一个具有 get 和 set 函数的对象,可以通过set修改原始值text
        const variable = computed({
            get:()=>text.value + "111",
            set:(val)=>text.value = val
        })
        //通过设置variable的值修改原始值text
        const changeText = ()=> variable.value = "china"
		
		//接受父组件的props变量,并用computed包装
        const { name } = toRefs(props)
        const anotherText = computed(()=>name.value+" "+variable.value + "=> 你好 世界")

        return {
            computedText,
            anotherText,
            changeText,
            variable
        }
    }
}
</script>
<template>
<div>
    <div>{{computedText}}</div>
    <!-- hello world -->
    <div>{{anotherText}}</div>
    <!-- Jack world111=> 你好 世界 -->
    <div>{{variable}}</div>
    <!-- world111 -->
    <button @click="changeText">修改</button>
</div>
</template>

有帮助的话,点个赞呗!关于vue3的一切疑问,大家可以在评论区留言提问。

上一篇:vue3 setup如何使用provide和inject?
下一篇:vue3 setup如何使用watch?

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐