vue.js setup风格 computed练习

先上栗子:

<template>
  <div>
    <p>a</p>
    <span>{{"22222"+ifshow}}</span>
    <br>
    <button @click="setb">
      {{b}}
    </button>
  </div>
</template>


<script>

import {ref,computed} from 'vue'

export default{
  setup(){
    const list = ref(
      {
        name:"xiaoming",
        books:[
          "youyu",
          "panghuang",
          "woyuditan"
        ]
      }
    )
    let  b   = ref('nowb')
    
    // debugger
    const ifshow   = computed({
      get(){
        const show = ref({
          "ifshow" : list.value.books.length > 0 ? 'ok':'no'
        })
        return show.value.ifshow
      },
      set(newVal){
        debugger
        b.value = newVal
      }
  })

    function setb(){
      ifshow.value = 'hihihihi'
    }
    
    return{
      list,
      b,
      ifshow,
      setb
    }
  }
}
    
    
</script>

<style scoped>

</style>

computed语法:

computed支持set和get,set是变量值改变之后会触发,get是变量依赖值改变之后会触发,

  const ifshow   = computed({
      get(){
        const show = ref({
          "ifshow" : list.value.books.length > 0 ? 'ok':'no'
        })
        return show.value.ifshow
      },
      set(newVal){
        debugger
        b.value = newVal
      }
  })

注意get返回的是ref响应式,记得写.value

效果:

button点击之后会变成:

 

 

一个神奇的问题:

给ifshow套了一层{ }之后,发现computed get不执行了。。。

    const { ifshow }   = computed({
      get(){
        const show = ref({
          "ifshow" : list.value.books.length > 0 ? 'ok':'no'
        })
        return show.value
      },
      set(newVal){
        debugger
        b.value = newVal
      }
  })

页面显示undefined:

 之后再看看这个问题,感觉可能是我不太会用const {}这种形式导致的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值