• 技术文章 >web前端 >Vue.js

    一文聊聊vue3中的ref、toRef、toRefs

    青灯夜游青灯夜游2023-04-13 17:32:56转载242

    本篇文章带大家深入聊聊vue3项目中关于ref、toRef、toRefs的使用方法,希望对大家有所帮助!

    一、ref

    ref 函数,可以把简单数据类型包裹为响应式数据(复杂类型也可以),注意 JS 中操作值的时候,需要加 .value 属性,模板中正常使用即可。
    举个例子:

    <template>
      <div class="container">
          <div>{{ name }}</div>
          <button @click="updateName">修改数据</button>
      </div></template><script>
      import { ref } from 'vue'
      export default {
          name: 'App',
          setup() {
              const name = ref('初映')
              const updateName = () => {
                  name.value = '初映CY的前说'
              }
              return { name, updateName }
          },
      }</script>

    ref的使用
    可看见写法与reactive()一样,不过是在js中书写的时候需要额外加一个.value即可。【相关推荐:vuejs视频教程web前端开发

    <template>
        <div class="container">
            <div>{{ data?.name }}</div>
            <button @click="updateName">修改数据</button>
        </div></template><script>
        import { ref } from 'vue'
        export default {
            name: 'App',
            setup() {
                // 初始值是 null
                const data = ref(null)
                setTimeout(() => {
                    // 右边的对象可能是后端返回的
                    data.value = {
                        name: '初映',
                    }
                }, 1000)
                const updateName = () => {
                    data.value.name = 'CY'
                }
                return { data, updateName }
            },
        }</script>

    ref包裹复杂类型数据

    二、toRef

    toRef 函数的作用:转换响应式对象中某个属性为单独响应式数据,并且转换后的值和之前是关联的(ref 函数也可以转换,但值非关联)。
    先看下面这个例子:

    <template>
      <div class="container">
          <h2>name: {{ obj.name }} age: {{obj.age}}</h2>
          <button @click="updateName">修改数据</button>
      </div></template><script>
      import { reactive } from 'vue'
      export default {
          name: 'App',
          setup() {
              const obj = reactive({
                  name: '初映',
                  age: 18,
                  address: '江西',
                  sex: '男',
              })
              const updateName = () => {
                  obj.name = '初映CY的前说'
              }
              return { obj, updateName }
          },
      }</script>

    toRef的使用
    这样写也可以将数据进行更改成为响应式的数据,但是带来了两个问题:

    <template>
      <div class="container">
          <h2>name: {{ name }} </h2>
          <button @click="updateName">修改数据</button>
      </div></template><script>
      import { reactive,toRef  } from 'vue'
      export default {
          name: 'App',
          setup() {
              const obj = reactive({
                  name: '初映',
                  age: 18,
                  address: '江西',
                  sex: '男',
              })
              const name = toRef(obj, 'name')
              const updateName = () => {
                  obj.name = '初映CY的前说'
              }
              return { name, updateName }
          },
      }</script>

    这样把我们需要的数据放进return即可,节约了性能与在模板中的写法,有点点了‘按需导入’的意思

    三、torefs

    toRefs 函数的作用:转换响应式对象中所有属性为单独响应式数据,并且转换后的值和之前是关联的。

    <template>
      <div class="container">
          <h2>{{ name }} {{ age }}</h2>
          <button @click="updateName">修改数据</button>
      </div></template><script>
      import { reactive, toRefs } from 'vue'
      export default {
          name: 'App',
          setup() {
              const obj = reactive({
                  name: '初映',
                  age: 10,
              })
              const updateName = () => {
                  obj.name = '初映CY的前说'
                  obj.age = 18
              }
              return { ...toRefs(obj), updateName }
          },
      }</script>

    toRefs转换所有响应式
    toRefs将我们所有的响应式数据都进行return出去了,届时直接用上数据名称即可,记得加上…喔

    据。话不多说,让我们来学习下这三个方法怎么用,以及与reactive的区别。

    (学习视频分享:vuejs入门教程编程基础视频

    以上就是一文聊聊vue3中的ref、toRef、toRefs的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:Vue
    上一篇:实例详解vue的$on方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 如何在Vue项目中去除严格模式• vue如何实现元素的显示和隐藏(对比v-if和v-show)• 深入探讨Angular8和Vue间的区别• 如何利用rancher2来部署vue项目• 如何使用Vue的过滤器功能来实现模糊搜索• vue三级数据获取不到怎么解决
    1/1

    PHP中文网