关于vue3的一些开发技巧

//addFn.js
import {ref,watch} from "vue"
export default useadd = (num1,num2)=>{
    let res = ref(0);
    watch([num1,num2],(num1,num2)=>{
       addFn(nums1,nums2);
    })
    let addFn =(nums1,nums2)=>{
        res.value = nums1 + nums2
    }
    return {res,addFn} 
}

<script>
    import useAdd from "./addFn.js"
    export default defineComponents({
        setup(props,{emits}){
            let num1 = ref(0);
            let num2 = ref(0);
            let {res,addFn} = useAdd(num1,num2);
            addFn(num1.value,num2.value);
              return {
                  res,num1,num2
                 }
             }
    })
</script>

一般情况下,vue3是这样写的

<script>
import { ref, reactive, defineComponent, onMounted, toRefs } from "vue";
import { useRoute, useRouter } from "vue-router";
import { Dialog } from "@nutui/nutui";
import { useUserStore } from "../../store/user";
import axios from "axios";
export default defineComponent({
  props: ["movies"],
  setup(props, { emits }) {
    let useColor = useUserStore();
    let router = useRouter();
    let visible = ref(false);
    let msg = reactive({
      movie: useColor.msg,
    });
    let back = () => {
      router.go(-1);
    };
    //在setup中使用生命周期
    onMounted(() => {
      console.log(useColor.msg);
    });
    return {
      back,
      share,
      ...toRefs(msg),
    };
  },
    //在option中使用生命周期
   onMounted() {
      console.log(useColor.msg);
    });
});
</script>

另一种写法   语法糖<script setup>

<script setup>
   const a = ref(0)
   const a = ref(0)
   const b = ref('')
   const c = ref(true)
   const d = reactive({})
   const actionA = ()=>{a.value++}
   const actionC = ()=>{c.value=!c.value}
   const actionB = ()=>{b.value += 'test' }
   const actiond = async ( )=> {
       const res =  await ajax(`url`)
       d.a = res.a
       d.b = res.b
       d.c = res.c
   }
   const resetD = ()=>{
       Object.keys(d).forEach(key=>delete d[key])
   }
//无需return 出去  有独立的api  defineProps  defineEmits  等
</script>

可以思考一下如何像react hooks 一样去使用 组合api

在独立模块中定义响应式数据和改变的方法

类似于vuex或者 pinia

//usePage.js
export default ()=>{
    const a = ref(0)
   const b = ref('')
   const c = ref(true)
    const actionA = ()=>{a.value++}
   const actionC = ()=>{c.value=!c.value}
   const actionB = ()=>{b.value += 'test' }
   //这时候需要写return
   return {
       a,actionA,
       b,actionB,
       c,actionC
   }
}

// usePageD.js
export default ()=>{
const d = reactive({})
const actionD = async ( )=> {
       const res =  await ajax(`url`)
       d.a = res.a
       d.b = res.b
       d.c = res.c
   }
   const resetD = ()=>{
       Object.keys(d).forEach(key=>delete d[key])
   }
   return {
       d,actionD,resetD
   }
}

使用的时候把数据和方法一并导入(和hooks一模一样...) 

import usePage from './usePage'
import usePage from './usePageD'

const {a,actionA} = usePage()
const {actionD,resetD} = usePageD()

vue对css样式的绑定

<script setup>
const pcolor = ref('#000')
</script>
<style scoped>
p{
 color:v-bind('pcolor')
}

生命周期汇总

2.0 周期名称             3.0 周期名称    说明
beforeCreate             setup                            组件创建之前
created                       setup                            组件创建完成
beforeMount             onBeforeMount           组件挂载之前
mounted                     onMounted                  组件挂载完成
beforeUpdate            onBeforeUpdate         数据更新,虚拟 DOM 打补丁之前
updated                      onUpdated                   数据更新,虚拟 DOM 渲染完成
beforeDestroy           onBeforeUnmount      组件销毁之前
destroyed                   onUnmounted             组件销毁后

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值