vue3的ref reactive有啥区别,vue3.0 ref reactive_1

  vue3的ref reactive有啥区别,vue3.0 ref reactive

  在vue3中,有两种正式的方法来声明响应数据:Ref()和Reactive()。本文主要介绍Vue3.0中ref和reactive区别的相关信息,有需要的可以参考一下。

  

目录

  参考和反应

  裁判员

  ReactiveRef和Reactive的区别

  浅层参考和浅层反应

  ToRaw -只修改数据而不渲染页面

  MarkRaw -不跟踪数据toRef -与数据源关联,不修改UItoRefs -设置多个toRef属性值customRef -自定义refref捆绑页面的标记摘要。

  

Ref与Reactive

  

Ref

  Ref用于创建响应数据的基本类型,默认情况下模板调用value来显示数据。方法修改需要修改要修改的值的值。

  !-模板语法

  模板

  div{{state}}/div

  /模板

  //js脚本

  setup(){

  设state=ref(10)

  state.value=11

  返回{state}

  }

  

Reactive

  Reactive用于创建引用类型的响应数据,

  !-模板语法

  模板

  div{{state.name}}/div

  /模板

  //js脚本

  setup(){

  让state=reactive({name:aaa}})

  张三

  返回{state}

  }

  

Ref与Reactive的区别

  Ref的本质是由Reactive创造的,Ref(10)=Reactive({ value:10 });

  在Ref模板调用中可以直接省略Value,需要修改value的值来改变方法中的变量值,这样修改才能成功。Reactive必须在模板中写入全部或显示全部数据。

  Reactive的本质是把各层的数字解析成代理对象,Reactive的响应默认是递归的。改变某层的值会被递归调用来重新渲染dom。

  

shallowRef 与shallowReactive

  Ref和Reactive都创建递归响应,将每一层的json数据解析到一个代理对象中。shallowRef和shallowReactive创建非递归的响应对象,shallowReactive创建的第一层数据会重新渲染dom。

  var state=shallowReactive({

  答:“答”,

  gf:{

  乙:乙,

  女:{

  丙:丙,

  s:{d:d}

  }

  }

  })

  state.a=1

  //更改第一层的数据将导致页面重新呈现

  //state=Proxy {a:a ,gf:{.}}

  //如果不更改第一层,只会更改其他数据页,不会重新呈现。例如,state.gf.b=2

  shallowRef创建的responsive对象需要修改整个值来重新渲染dom。

  var state=shallowRef({

  答:“答”,

  gf:{

  乙:乙,

  女:{

  丙:丙,

  s:{d:d}

  }

  }

  })

  state.value.a=1

  /*

  无法重新渲染。shallowRef的原理也是由shallowReactive({value:{}})创造的。您必须修改该值才能重新渲染。

  */

  state.value={

  答:“1”,

  gf:{

  乙:二,

  女:{

  丙: 3 ,

  s:{d:d}

  }

  }

  }

  如果使用shallowRef,只想更新某一层的数据,可以使用triggerRef。

  var state=shallowRef({

  答:“答”,

  gf:{

  乙:乙,

  女:{

  丙:丙,

  s:{d:d}

  }

  }

  })

  state . value . gf . f . SD=4

  triggerRef(状态)

  页面将再次呈现。

  

toRaw ---只修改数据不渲染页面

  如果只想修改响应数据,不想造成页面渲染,可以使用ToRaw。

  var obj={name:test}

  变量状态=反应(对象)

  var obj2=toRaw(州)

  ob2 . name= zs //不会导致页面呈现。

  -

  //如果是用ref创建的,则获取值

  var obj={name:test}

  变量状态=ref(obj)

  var obj2=toRaw(state.value)

  

markRaw --- 不追踪数据

  如果不希望数据被跟踪成为响应数据,可以调用这个方法,不能跟踪修改数据重新渲染页面。

  var obj={name:test}

  obj=markRaw(obj)

  变量状态=反应(对象)

  State.name=zs//数据页不能修改,也不会被修改。

  

toRef --- 跟数据源关联 不修改UI

  如果用ref创建的响应变量不会与源数据相关联,如果它希望与源数据相关联,但数据更改不会更新UI,则应该用toRef创建。

  var obj={name:test}

  var state=ref(obj.name)

  State.name=zs //此时obj的name属性的值不会改变,UI会自动更新。

  ///

  var obj={name:test}

  Var=toref (obj, name )//只能设置一个属性值。

  State.name=zs//此时obj中name属性的值会发生变化,但是UI不会更新。

  

toRefs ---设置多个toRef属性值

  如果要设置多个toRef属性值,可以使用toRef。

  var obj={name:测试,年龄:16}

  var state=toRefs(obj)

  state.name.value=zs//obj的名称属性值也会改变,但是UI不会更新。

  age of state.age.value=18//obj的属性值也会改变,但是UI不会更新。

  

customRef ---自定义一个ref

  您可以通过customRef方法自定义响应ref方法。

  函数myRef(值){

  /*

  customRef函数返回一个对象。对象中有两个方法,get/set方法。创建的对象在获取数据时可以访问get方法,创建的对象修改其值时会触发set方法。

  customRef函数有两个参数,track/trigger,track参数表示跟踪。它在get方法中被调用,可以随时跟踪数据变化。触发参数的意思是触发响应,set方法中的调用可以更新UI界面。

  */

  return customRef((跟踪,触发)={

  返回{

  get(){

  Track()//跟踪数据

  返回值

  },

  set(newVal){

  值=新值

  Trigger()//更新UI界面

  }

  }

  })

  }

  setup(){

  var age=myRef(18)

  年龄值=20

  }

  

ref 捆绑页面的标签

  Vue2.0可以通过这个得到dom元素. refs vue3取消这个操作,得到不带refs的dom元素,vue3取消这个操作,得到不带refs的dom元素,vue3取消这个操作。没有refs的属性值,可以直接用ref()方法生成响应式变量,用dom元素绑定。

  模板

  div ref=box/div

  /模板

  从“vue”导入{ref,onMounted}

  /*

  设置方法调用在创建前和创建后的生命周期之间。

  */

  脚本

  setup(){

  var box=ref(空)

  onMounted(()={

  console.log(onMounted ,box.value)

  })

  console.log(box.value)

  返回{box}

  }

  /脚本

  

总结

  关于Vue3.0中REF和Reactive的区别的这篇文章到此为止,更多关于Vue 3.0中Ref和Reactive的区别,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

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

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