vue中<script setup>中使用computed方法

在setup选项里使用computed需要手动引入computed方法,computed接受一个 getter 函数,并根据 getter 的返回值返回一个不可变的响应式 ref 对象。或者,接受一个具有 get 和 set 函数的对象,用来创建可写的 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>
posted @ 2023-05-24 11:09  ZerlinM  阅读(73)  评论(0编辑  收藏  举报