vue3 hooks,vue hooks组件

  vue3 hooks,vue hooks组件

  本文主要介绍了vue3的自定义钩子/可组合功能模式,有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

  自定义挂钩/可组合功能1。mixins模式2的痛点。传统混音模式3的示例。自定义挂钩模式vue3示例(挂钩)

  

自定义hooks/可组合函数

  vue3组合api下mixins的替代方法(自定义钩子/可组合函数)

  传统上,封装在导入文件中的mixins通过这个调用属性或方法,

  虽然这在vue3的组合API中没有定义,但事实上,这两者是冲突的,

  你只能打包一个全新的方法来使用类似mixins的函数。

  我们把这种全新的方式叫做自定义钩子(注:vue在写这篇文章的时候还没有正式有这个概念,基本都是自己摸索出来的。我们把react的习惯称为定制钩子。现在有了官方定义:可组合函数)。

  

1.mixins方式的痛点

  传统的mixin有很多诟病,mixin的深度合并非常隐式,使得代码逻辑更加难以理解和调试,如下:

  mixins 容易冲突:因为每个特性的属性都合并到同一个组件中,所以组件中同名的属性或方法会覆盖mixins中的属性或方法。可重用性有限:我们不能给mixins传递任何参数来改变它的逻辑,这降低了它们在抽象逻辑上的灵活性。数据来源不清晰:组件中使用的mixins中的数据或方法在当前组件代码中无法搜索到,容易造成错误解释,比如被误删为错误码或冗余代码。

  

2.传统mixins方式示例

  myMixins.ts:

  导出默认值{

  data () {

  返回{

  aa: 1

  }

  },

  已安装(){

  this.testFn()

  },

  方法:{

  testFn () {

  console.log(testFn )

  }

  }

  }

  index.vue:

  模板

  div{{ aa }}/div

  /模板

  脚本语言

  从“vue”导入{ defineComponent,onMounted }

  从导入myMixins。/myMixins

  导出默认定义组件({

  mixins: [myMixins],

  已安装(){

  console.log(已装载索引)

  }

  })

  /脚本

  如上图,封装的myMixins实际上只做两件事,一是在挂载的hook函数中执行testFn方法,二是公开一个aa变量供外部使用;在index.vue中引入aa后,在dom中使用。

  这是mixins的两种最典型的用法。一种是自己执行一些常用逻辑,外部导入的时候没必要管。另一种是定义一些数据变量供外部使用。

  

3.自定义hooks方式示例

  1、代码封装

  代码优先,myHooks.ts:

  从“vue”导入{ ref,onMounted }

  导出默认函数(){

  const aa=ref(1)

  函数testFn () {

  console.log(testFn )

  }

  onMounted(()={

  测试Fn()

  })

  返回{

  嗜酒者互诫协会

  }

  }

  index.vue:

  模板

  div{{ aa }}/div

  /模板

  脚本语言

  从“vue”导入{ defineComponent,onMounted }

  从导入myHooks。/myHooks

  导出默认定义组件({

  setup () {

  const { aa }=myHooks()

  onMounted(()={

  console.log(已装载索引)

  })

  返回{

  嗜酒者互诫协会

  }

  }

  })

  /脚本

  正如您所看到的,这里没有使用mixins属性来引入逻辑代码,但本质上它只是封装了一个ts文件用于引入。使用后,数据源清晰可见,代码引用也有据可查。

  2、为什么导出的是function

  因为作为对象导入意味着导入时执行封装的逻辑,而我们封装的逻辑是composition api包装的特殊代码,只能在setup中正常使用,所以需要导出一个函数,这样才能在组件中使用

  在setup中调用这个函数来指定执行时间。

  导出函数的另一个目的是方便参数传递,这样在引用不同的组件时可以做一些差异化的逻辑处理。

  3、封装建议

  导出的函数只需要返回组件中引用的数据;对于不需要引用的组件,不需要返回。只有导入的函数可以在组件中调用。

  组件中的自定义钩子调用代码最好放在安装的第一行,清晰不易遗漏。

  响应式api使用风格统一。其实这也是整个项目风格统一的问题。对于setup中定义的数据,需要用ref或者reative来响应,这样才能保持统一,这样有些就不会用with了。价值和一些不会。

  

vue3(hooks)

  vue3的钩子相当于封装了公共方法的js文件。

  /* *挂钩计数器方法的文件* */

  从“vue”导入{ ref }

  导出默认函数(){

  常量计数器=ref(0)

  常数增量=()={

  计数器值

  }

  const devrement=()={

  计数器.值-

  }

  返回{

  计数器,

  增量,

  发展

  }

  }

  并且介绍和使用方法如下。

  模板

  差异

  H1我的名字是:{{info.name}}/h1

  H1我的年龄是:{{info.age}}/h1

  当前的h1计数为:{{counter}}/h1

  Button @click=increment 单击以添加一个/button

  Button @ click= devremedy Click减一/button

  /div

  /模板

  Script //你也可以使用setup语法在这里写sugar。

  从“vue”导入{ reactive };

  //引入钩子文件名作为变量名。

  从导入useCounter./hooks/use counter . js ;

  导出默认值{

  setup(){

  const info=reactive({name:dxx ,年龄:18})

  //解构hooks文件中的所有方法和变量以便使用。

  const { counter,increment,devrement }=useCounter()

  //最后,导出方法和变量。

  返回{

  信息,

  计数器,

  增量,

  发展

  }

  }

  }

  /脚本

  以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: