IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue3.0 —— setup、ref、reactive和 computed的简介及使用 -> 正文阅读

[JavaScript知识库]Vue3.0 —— setup、ref、reactive和 computed的简介及使用

一. setup

特性:

????????1、setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之间的函数 也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的

  2、setup函数是 Composition API(组合API)的入口

  3、在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

使用:

? ? ? ? 1.setup可以作为函数使用:?

<template>
  <div>
    <p>{{msg}}</p>
    <button @click="change">change</button>
  </div>
</template>

<script>
  import {ref} from "vue"
  export default {
    data() {
      return {
       
      }
    },
    setup() {
      let msg = ref("hello")
      function change() {
        msg.value = "修改之后的值"
      }
      return {msg,change}
    }
  }

</script>

setup作为函数使用时需要注意:

????????????1.这个函数内部的变量/函数是局部的
?? ??? ??? ?2.这个函数的返回值 可以被当前组件的任意地方使用
?? ??? ??? ?3.这个函数内部不要使用this来操作组件数据
?? ??? ??? ?4.setup返回的对象中的数据和data中的数据同名了 setup优先级更高
?? ??? ??? ?5.setup在组件加载期间 只会运行一次

2.setup也可以作为<script></script>标签的属性,即<script setup></script>;这样写就不用写return来返回,模块中也能使用标签内的数据。

二、ref

? ? ? ? ref的作用:定义一个响应式的数据

????????语法:let xxx = ref("value")

? ? ? ? 注意:1.在js中操作数据时要使用.value,即xxx.value

? ? ? ? ? ? ? ? ? ?2.模板中读取数据不需要.value,可以直接使用

? ? ? ? ? ? ? ? ? ?3.接收的数据类型可以是基本数据类型也可以是引用数据类型

<template>
  <div>
    <p>{{msg}}</p>
    <button @click="change">change</button>
  </div>
</template>

<script>
  import {ref} from "vue"
  export default {
    data() {
      return {
       
      }
    },
    setup() {
      let msg = ref("hello")
      function change() {
        msg.value = "修改之后的值"
      }
      return {msg,change}
    }
  }

</script>

三、reactive

????????作用:定义一个对象类型的响应式数据(基本数据类型别用它,用ref函数),主要用于嵌套层级比较复杂的数据

????????语法:let代理一个对象 = reactive(被代理的对象) 接收一个对象(或数组),返回一个代理器对象(proxy对象),即 let xxx =?reactive(value)

? ? ? ? 注意:在js中操作数据时不需要使用.value,可以直接使用变量

<script setup>
    let arr2 = reactive([111,{name:"xiaozhang",like:["game","study"]}])
    let change6 = ()=> {
        arr2[1].like[0] = "read"
    }
</script>   

<template>
  <div>
    <p>{{arr2[1].like[0]}}</p>
    <button @click="change6">change6</button>
  </div>
</template> 

四、computed计算属性

? ? ? ? vue3.0中的computed计算属性与vue2中的用法一致。

<script setup>
    import {
        ref,
        reactive,
        computed
    } from 'vue'

    let msg = ref("订单")

    let arr = reactive([{
            title: "产品1",
            price: 16,
            count: 3
        },
        {
            title: "产品2",
            price: 13,
            count: 2
        },
        {
            title: "产品3",
            price: 19,
            count: 7
        },
        {
            title: "产品4",
            price: 12,
            count: 1
        },
        {
            title: "产品5",
            price: 16,
            count: 5
        }
    ])

    let total = computed(() => {
        return arr.reduce((n1, n2) => {
            return n1 + n2.price * n2.count
        }, 0)
    })

    let change = () => {
        arr[0].count = 10
    }

    let add = (index) => {
        arr[index].count++
    }

    let subtract = (index) => {
        if (arr[index].count > 0) {
            arr[index].count--
        } else {
            arr.splice(index, 1)
        }
    }
</script>

<template>
    <div>
        <div class="box">
            <p>{{msg}}</p>

            <div v-for="(el,index) in arr" :key="index">
                <div>{{el.title}} --- {{el.price}}元 ---
                    <button @click="subtract(index)">-</button>
                    {{el.count}}
                    <button @click="add(index)">+</button>
                </div>
            </div>
            <button>{{total}}元</button>
            <button @click="change">修改</button>

        </div>
    </div>
</template>

<style scoped>
    .box {
        width: 300px;
        height: 300px;
        background-color: gray;
    }
</style>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:19:29  更:2022-09-21 00:20:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:30:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码