vue3学习记录(一)

1.setup函数

 // 主要有两个参数
  // props 父组件中传递过来的参数 
  // emit 组件内部需要出发事件的时候
  // slots 父组件传递过来的插槽
  // setup(props,context) {
  props: {
    msg: String,
  },
  setup(props, { attrs, slots, emit }) {
  	let {msg} = toRefs(props) // 可以使用进行解构赋值
  	let msg = toRef(props,'msg')  // 
 
    console.log(props.msg, "父组件的传递的参数");
    console.log(emit, "第二个参数");
    console.log(slots, "第二个参数");
    console.log(attrs, "第二个参数");
   
    return{
      count:'计数器'
    }
  },

2.reactive的使用

<script>
import { reactive } from "vue";
export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },

  setup() {
    const state = reactive({
      count: "技术",
    });
    return {
      state
    };
  },
};
</script>

3.toRefs,customRef,toRef,ref的使用

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>{{ count }}</h2>
    <h2>{{ age }}</h2>
    <button @click="jiaBtn()">加一个</button>
    <input type="text" v-model="val1">
    <h1>{{val1}}</h1>
  </div>
</template>

<script>
import { reactive, toRefs, toRef } from "vue";
import refs from '../utils/ref'; // 自定义ref
export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },

  setup() {
    // toRefs:将所有的reactive中的所有属性转化为ref对象,建立链接
    // toRef:将其中一个的reactive中的所有属性转化为ref对象,建立链接
    const val1 = refs('')
    const info = reactive({ name: "张三", age: 18 });
    const { name } = toRefs(info)
    const age = toRef(info,"age")
    const jiaBtn = ()=>{
      age.value++;
    }
    return {
      name,
      val1,
      age,
      jiaBtn
    };
  },
};
</script>

// 自定义refs
import { customRef } from 'vue'
// 定义ref
export default function (value) {
  let timer = null;
  return customRef((track, trigger) => {
    return {
      get() {
        track();
        return value;
      },
      set(newValue) {
        clearTimeout(timer)
        timer = setTimeout(() => {
          value = newValue;
          trigger();
        }, 1000)
      }
    }
  })
}

4.computed和watch和watchEffect

<script>
import { ref, computed, watchEffect, watch } from "vue";

export default {
  name: "HelloWorld",
  setup() {
    // 自动寻找对应的
    const count = ref(10);
    const age = ref(18);
    const haha = ref(null);
  
    // 计算属性
    const sum = computed(() => count.value + age.value);
    const jiaqilai = computed({
      get: () => count.value + " " + age.value,
      set: (val) => console.log(val),
    });
    
    const jiaBtn = () => {
      count.value++;
      age.value++;
    };
    
    // 监听属性
    watchEffect(() => {
        console.log("haha", haha.value);
      },{
      // 通过 flush:post可以避免副作用,在DOM更新后运行副作用,确保模板引用与DOM保持同步,并引入正确的元素。
        flush: "post",
      }
    );
    // 监听某个值
	watch(() => count, (val) => {
	  if (val) {
	  	console.log(val, 'val改变的值')
	  }
	}, { immediate: true })
    return {
      count,
      sum,
      age,
      haha,
      jiaqilai,
      jiaBtn,
    };
  },
};
</script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你瞅啥灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值