vue3.0 api,vue3 组合式api

  vue3.0 api,vue3 组合式api

  本文主要介绍vue3常见的API用法,帮助大家更好的理解和学习使用vue。感兴趣的朋友可以了解一下。

  

目录

  生命周期变更反应。我们在vue2.x,Vue 3.x中使用ref来获取元素标签,我们应该怎么做才能获取元素标签呢?toreftorefsshalloweactiveshallowtorawmarkrawacheffectgetcurrentinstancestoruvue 3 . x发布了这么久,相关的生态也逐渐发展起来,包括vite这种新的打包工具。在vue3.0的学习过程中有一些实用的api对比,希望能在开发中给大家一个示范,准确的使用相应的api来完成我们的项目开发。

  

生命周期的变更

  特别是setup函数代替了beforeCreate和created这两个生命周期函数,所以我们可以认为它的执行时间在beforeCreate和created之间。

  Vue2

  Vue3

  创建前

  设置

  创造

  设置

  即将挂载

  出发前

  安装好的

  已安装

  更新前

  更新前

  更新

  未更新

  毁灭前

  onBeforeUnmount

  毁坏的

  未安装的

  了解过vue3的朋友都知道现在会用设置功能。至于设置功能中的操作数据,我们用实例来说明会更好。

  

reactive

  使用reactive方法创建响应式数据对象,该API也解决了Vue2通过defineProperty实现数据响应的缺陷。

  用法非常简单,只需将数据作为参数传入即可。

  模板

  div id=应用程序

  !-4.访问响应数据对象中的计数-

  {{ state.count }}

  /div

  /模板

  脚本

  //1.从vue导入反应

  从“vue”导入{reactive}

  导出默认值{

  名称:“应用程序”,

  setup() {

  //2.创建响应数据对象

  常量状态=反应性({count: 3})

  //3.返回模板使用的响应数据对象状态返回。

  返回{state}

  }

  }

  /脚本

  

ref

  在引入setup函数时,我们使用ref函数来包装一个响应式数据对象,它看起来与表面上的reactive完全一样。几乎是一样的,因为ref通过reactive包装了一个对象,然后将值传递给对象中的value属性,这就解释了为什么我们需要添加。我们每次来访都很值。

  我们可以简单地把ref(obj)理解为这个reactive({value: obj})

  脚本

  从“vue”导入{ref,reactive}

  导出默认值{

  名称:“应用程序”,

  setup() {

  const obj={count: 3}

  const state1=ref(obj)

  常数状态2=反应(对象)

  console.log(状态1)

  console.log(状态2)

  }

  }

  /脚本

  注意:在。这里提到的值,在setup函数中访问ref-wrapped对象时需要加上,在template模板中访问时不需要,因为是否ref-wrapped会在编译时自动识别。

  那么我们如何选择ref和reactive呢?

  建议:

  对基本类型值(String、Nmuber、Boolean等)使用ref。)或单值对象(如只有一个属性值的对象,如{count: 3})

  引用类型值(对象、数组)使用reactive。

  

我们在vue2.x中获取元素标签是用 ref ,vue3.x我们要获取元素标签怎么办呢?

  模板

  差异

  Div= el div元素/div

  /div

  /模板

  脚本

  从“vue”导入{ ref,onMounted }

  导出默认值{

  setup() {

  //创建一个与元素的ref属性名同名的DOM引用

  const el=ref(空)

  //目标元素只能在挂载后通过el获得。

  onMounted(()={

  El.value.innerHTML=内容已被修改

  })

  //返回创建的引用。

  return {el}

  }

  }

  /脚本

  获取元素的操作分为以下步骤:

  首先,为目标元素的ref属性设置一个值,假设为el。

  然后调用setup函数中的ref函数,值为null,赋给变量el。请注意,变量名必须与我们为元素设置的ref属性名相同。

  将引用变量el返回给元素。

  补充:设置的元素引用变量只有在组件挂载后才能访问,所以挂载前操作元素无效。

  当然,如果我们引用一个组件元素,我们会得到组件的实例对象。

  

toRef

  ToRef是将对象中的值转换成响应数据,它接收两个参数,第一个是obj对象;第二个参数是对象中的属性名。

  脚本

  //1.导入参考

  从“vue”导入{toRef}

  导出默认值{

  setup() {

  const obj={count: 3}

  //2.将obj对象中属性count的值转换为响应数据。

  const state=toRef(obj, count )

  //3.返回由toRef包装的数据对象,供模板使用。

  返回{state}

  }

  }

  /脚本

  上面还有一个裁判,还有一个斗牛士。没有冲突吗?两者具有不同的效果:

  模板

  p{{ state1 }}/p

  按钮@click=add1 添加/按钮

  p{{ state2 }}/p

  按钮@click=add2 添加/按钮

  /模板

  脚本

  从“vue”导入{ref,toRef}

  导出默认值{

  setup() {

  const obj={count: 3}

  const state1=ref(对象计数)

  const state2=toRef(obj, count )

  函数add1() {

  状态1 .值

  Console.log(原始值:,obj);

  Console.log(响应数据对象:,状态1);

  }

  函数add2() {

  状态2 .值

  Console.log(原始值:,obj);

  Console.log(响应数据对象:,状态2);

  }

  返回{状态1,状态2,添加1,添加2}

  }

  }

  /脚本

  Ref是原始数据的副本,不会影响原始值。同时,当响应数据对象的值改变时,视图将同步更新。

  ToRef是对原始数据的引用,会影响原始值,但是响应数据对象的值改变后视图会更新吗?

  

toRefs

  将传入对象中所有属性的值转换为响应数据对象。该函数支持一个参数,即obj对象。

  脚本

  //1.导入参考文件

  从“vue”导入{toRefs}

  导出默认值{

  setup() {

  const obj={

  名称:前端印象,

  年龄:22,

  性别:0

  }

  //2.将obj对象中属性count的值转换为响应数据。

  const state=toRefs(obj)

  //3.打印出来看看。

  console.log(状态)

  }

  }

  /脚本

  返回的是一个对象,它包含每个打包的响应数据对象。

  

shallowReactive

  听这个API的名字就知道是浅反应。是不是说明原无功很深?是的,它是一个性能优化的API。

  脚本

  模板

  p{{ state.a }}/p

  p{{ state.first.b }}/p

  p{{ state.first.second.c }}/p

  按钮@click=change1 Change1/button

  按钮@click=change2 Change2/button

  /模板

  脚本

  从“vue”导入{shallowReactive}

  导出默认值{

  setup() {

  const obj={

  答:1,

  首先:{

  乙:2,

  第二:{

  丙:3

  }

  }

  }

  常量状态=浅反应(obj)

  函数change1() {

  状态a=7

  }

  函数change2() {

  state.first.b=8

  state.first.second.c=9

  console.log(状态);

  }

  返回{state}

  }

  }

  /脚本

  首先,我们单击了第二个按钮,并更改了第二个级别B和第三个级别c。虽然值发生了变化,但视图没有更新。

  当我们点击第一个按钮,更改第一级的A时,整个视图被更新;

  因此,shallowReactive监听第一层属性的值,并在它发生变化时更新视图。

  

shallowRef

  这是一个浅ref,用于类似shallowReactive的性能优化。使用triggerRef,可以通过调用它立即更新视图,它接收一个参数状态,即需要更新的Ref对象。

  ShallowReactive监控对象第一层的数据变化来驱动视图更新,而shallowRef监控。值来更新视图。

  模板

  p{{ state.a }}/p

  p{{ state.first.b }}/p

  p{{ state.first.second.c }}/p

  Button @click=change 更改/button

  /模板

  脚本

  从“vue”导入{shallowRef,triggerRef}

  导出默认值{

  setup() {

  const obj={

  答:1,

  首先:{

  乙:2,

  第二:{

  丙:3

  }

  }

  }

  const state=shallowRef(obj)

  console.log(状态);

  函数变化(){

  状态.值.第一个. b=8

  状态.值.第一个.第二个. c=9

  //修改值后立即驱动视图更新

  triggerRef(状态)

  console.log(状态);

  }

  返回{状态,更改}

  }

  }

  /脚本

  

toRaw

  ToRaw方法用于获取ref或反应对象的原始数据。

  脚本

  从“vue”导入{reactive,toRaw}

  导出默认值{

  setup() {

  const obj={

  名称:前端印象,

  年龄:22岁

  }

  常量状态=反应(对象)

  const raw=toRaw(州)

  console.log(obj===raw) //true

  }

  }

  /脚本

  上面的代码证明了toRaw方法是从reactive对象中获取原始数据的,所以我们可以很容易地通过修改原始数据的值来做一些性能优化,而不需要更新视图。

  注意:补充一下,当toRaw方法接收的参数是ref object时,需要添加值以获取原始数据对象。

  

markRaw

  RAW方法可以将原始数据标记为无响应,也就是用ref或reactive进行包装,但仍然无法实现数据响应。它接收一个参数,即原始数据,并返回标记的数据。即使我们修改了值,我们也不会更新视图,也就是说,我们不实现数据响应。

  模板

  p{{ state.name }}/p

  p{{ state.age }}/p

  Button @click=change 更改/button

  /模板

  脚本

  从“vue”导入{reactive,markRaw}

  导出默认值{

  setup() {

  const obj={

  名称:前端印象,

  年龄:22岁

  }

  //用markRaw标记原始数据obj,使其数据更新无法再被跟踪。

  const raw=markRaw(obj)

  //尝试用reactive包装raw,使其成为响应性数据

  恒定状态=反应(原始)

  函数变化(){

  state.age=90

  console.log(状态);

  }

  返回{状态,更改}

  }

  }

  /脚本

  

watchEffect

  WatchEffect它与watch的区别主要在于以下几点:

  不需要手动传递依赖项。

  每次初始化时都会执行一个回调函数来自动获取依赖关系。

  无法获取原始值,只能获取更改后的值。

  脚本

  从“vue”导入{reactive,watchEffect}

  导出默认值{

  setup() {

  const state=reactive({ count: 0,name: zs })

  watchEffect(()={

  console.log(状态.计数)

  console.log(state.name)

  /*初始化时打印:

  0

  零偏移(zero shift)

  1秒钟内打印:

  一个

  限位开关(Limit Switch)

  */

  })

  setTimeout(()={

  状态.计数

  state.name=ls

  }, 1000)

  }

  }

  /脚本

  不像watch方法那样传入依赖项,而是直接指定回调函数。

  组件初始化时,回调函数执行一次,待检测的数据是自动获取的state.count和state.name。

  根据以上特点,我们可以选择使用哪个监听器。

  

getCurrentInstance

  我们都知道,在Vue2的任何组件中,我们都可以通过这个获得当前组件的实例,但是在Vue3中,我们的很多代码都是在setup函数中运行的,这就指向了这个函数中的undefined。那么我们如何获得当前组件的实例呢?这时,可以使用另一种方法,即getCurrentInstance。

  模板

  p{{ num }}/p

  /模板

  脚本

  从“vue”导入{ref,getCurrentInstance}

  导出默认值{

  setup() {

  const num=ref(3)

  const instance=getCurrentInstance()

  console.log(实例)

  返回{num}

  }

  }

  /脚本

  关注实例中的ctx和代理属性,这两个是我们想要的。可以看出,ctx和proxy的内容非常相似,只是后者在前者外面包裹了一层代理,可见代理是有求必应的。

  

useStore

  在Vue2中使用Vuex时,我们都是通过这个得到Vuex的实例。$store,但是前面部分说Vue2中获取这个的方式不一样,我们在getCurrentInstance()中没有找到$store的属性。Vue3的ctx,那么如何获取Vuex的实例呢?这是通过vuex中的一个方法,即useStore。

  //存储文件夹下的index.js

  从“vuex”导入Vuex

  const store=Vuex.createStore({

  状态:{

  名称:前端印象,

  年龄:22岁

  },

  突变:{

  ……

  },

  ……

  })

  //example.vue

  脚本

  //从vuex导入useStore方法

  从“vuex”导入{useStore}

  导出默认值{

  setup() {

  //获取vuex实例

  const store=useStore()

  console.log(存储)

  }

  }

  /脚本

  然后就可以像以前一样用vuex了。

  以上就是vue3常用API的详细介绍。更多关于vue常用API的信息,请关注我们的其他相关文章!

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

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