VUE3 setup学习记录

<script lang="ts">
import {watchEffect, readonly, h, ref, defineComponent, toRefs, onMounted, watch,computed,reactive  } from "vue";
import classes from "*.module.css";
export default defineComponent({
  name: "HelloWorld",
  data(){
    return {
      name:'gaoliang'
    }
  },
  props: {
    msg: {
      type: String,
      required: true
    }
  },
  mounted(){
    console.log('helloWorld mounted')
  },
  // setup组合式 API 接收俩参数,props,context上下文环境,类似于this,在setup里是不能使用this的
  setup(props,context){
    /*获取props里的参数,使用toRefs,在使用前要在import中将期解构引入
     在return中将msg返回,才能在模板中使用msg
      let { msg } = toRefs(props);
      return {msg} 
      上述代码在模板中可以直接使用{{msg}}
      但如果是 return {nest:{msg:msg}} 
      在模板中要这样使用{{nest.msg.value}}
      官方是这样描述的这句话“
        当 ref 作为渲染上下文 (从 setup() 中返回的对象) 上的 property 
        返回并可以在模板中被访问时,
        它将自动浅层次解包内部值。只有访问嵌套的 ref 时需要在模板中添加 ”
    */
    /**
     * ref的使用
     * 
      const root2 = ref(null)
      onMounted(function(){
        //setup里的onMounted要比mounted(){}执行的要早
       root2.value.innerHTML = 'root2' 
      })
      return {root2}
     */
    /**
     * reactive的使用,他与ref的主要区别就是ref用于基础类型数据,
     * reactive用于复杂数据,对象,数组
     * 在setup中取值也有所不同,ref创建的响应式值需要.value,而reactive创建的
     * 响应式应用可以直接取属性
     *  const o = reactive({name:'gaoliang'})
     * console.log(o.name)
     * consg age = ref(10)
     * console.log(age.value)
     */
    /**
     * computed计算函数的使用,在使用时,也需要先引入,返回
     *   const aaa = computed(() => {return 100})
     * return {aaa} 
     */
    /**
     * watch的使用 在使用时,也需要先引入
     * watch(counter,(n,o)=>{
        console.log(`counter由${o}变成了${n}`)
      })
     */
    /**
     * watchEffect 的使用 在使用时,也需要先引入
     * 在回调函数中,依赖发生了改变,就会执行watchEffect 的回调函数
     * 而且经测试,对象属生变化,数组元素变化,watchEffect都可以检查得到 
     * watchEffect(() => {
      console.log('vvvvvvvvvvvvvvvvvvvvvv', counter.value)
      console.log('vvvvvvvvvvvvvvvvvvvvvv', o.name)
    })
     */
    /**
     * context参数的使用
     * context 是一个普通的 JavaScript 对象,它暴露组件的三个 property:
     *  // Attribute (非响应式对象)
          console.log(context.attrs)

          // 插槽 (非响应式对象) context.slots.default()
          console.log(context.slots)

          // 触发事件 (方法) 同vue2中的this.$emit同样的用法 context.emit('cli','hahahahah')
          console.log(context.emit)
     */
      
  }
});
</script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值