首页 > 其他分享 >响应式基础

响应式基础

时间:2023-02-27 14:48:01浏览次数:45  
标签:count reactive DOM ++ 基础 响应 state

响应式基础

使用 reactive() 函数创建一个响应式对象或数组:

<script setup>
import { reactive } from 'vue'

const state = reactive({ count: 0 })

function increment() {
  state.count++
}
</script>

<template>
  <button @click="increment">
    {{ state.count }}
  </button>
</template>

DOM 更新时机

当你更改响应式状态后,DOM 会自动更新。然而,你得注意 DOM 的更新并不是同步的。相反,Vue 将缓冲它们直到更新周期的 “下个时机” 以确保无论你进行了多少次状态更改,每个组件都只更新一次。

若要等待一个状态改变后的 DOM 更新完成,你可以使用 nextTick() 这个全局 API:

import { nextTick } from 'vue'

function increment() {
  state.count++
  nextTick(() => {
    // 访问更新后的 DOM
  })
} 

深层响应性

import { reactive } from 'vue'

const obj = reactive({
  nested: { count: 0 },
  arr: ['foo', 'bar']
})

function mutateDeeply() {
  // 以下都会按照期望工作
  obj.nested.count++
  obj.arr.push('baz')
}

reactive() 的局限性

reactive() API 有两条限制:

  1. 仅对对象类型有效(对象、数组和 MapSet 这样的集合类型),而对 stringnumber 和 boolean 这样的 原始类型 无效。

  2. 因为 Vue 的响应式系统是通过属性访问进行追踪的,因此我们必须始终保持对该响应式对象的相同引用。这意味着我们不可以随意地“替换”一个响应式对象,因为这将导致对初始引用的响应性连接丢失:

响应性语法糖

相对于普通的 JavaScript 变量,我们不得不用相对繁琐的 .value 来获取 ref 的值。这是一个受限于 JavaScript 语言限制的缺点。然而,通过编译时转换,我们可以让编译器帮我们省去使用 .value 的麻烦。Vue 提供了一种编译时转换,使得我们可以像这样书写之前的“计数器”示例:

<script setup>
let count = $ref(0)

function increment() {
  // 无需 .value
  count++
}
</script>

<template>
  <button @click="increment">{{ count }}</button>
</template>

  

 

标签:count,reactive,DOM,++,基础,响应,state
From: https://www.cnblogs.com/friend/p/17159592.html

相关文章

  • 记一次前端请求与响应包全加密的解码过程
    即上次解密后,开发不死心,过了几个月,给返回包也进行了加密。并对前端js进行了压缩混淆   根据观察,初步认为服务端也进行了相同的rsa+aes加密,然后把rsa加密后的key和i......
  • Proxifier配合burp抓包但是burp收不到响应包解决思路
    题记        最近公司的项目比较特殊,不是传统的在web端的测试。而是客户给了一个exe,安装在电脑之后需要登录在工作台点击相关系统测试,点击相关系统后会在exe内部......
  • vue源码分析-响应式系统(一)
    从这一小节开始,正式进入Vue源码的核心,也是难点之一,响应式系统的构建。这一节将作为分析响应式构建过程源码的入门,主要分为两大块,第一块是针对响应式数据props,methods,da......
  • TypeScript 基础语法
    TypeScript基础语法TypeScript程序由以下几个部分组成:模块函数变量语句和表达式注释第一个TypeScript程序我们可以使用以下TypeScript程序来输出"HelloW......
  • TypeScript 基础类型
    TypeScript基础类型TypeScript包含的数据类型如下表:数据类型关键字描述任意类型any声明为any的变量可以赋予任意类型的值。数字类型number双精度64位......
  • 一文学会ftrace的基础用法
    0.官网https://www.kernel.org/doc/html/latest/trace/ftrace.html1.ftrace是什么ftrace是linux原生的一个trace工具,最早在2.6.27引入,跟踪能力强大,可以调试和分析诸如......
  • Python基础语法与执行脚本的3种方式
    一、Pytnon特点什么是编程语言是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作。简单来说......
  • Vue 基础
    模板语法Vue使用一种基于HTML的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的DOM上。所有的Vue模板都是语法层面合法的HTML,可以被符合规范的浏览器......
  • java基础02
    强制类型转换强制转换(类型)变量名  高-----低自动转换   低-----高inti=128byteb=(byte)i//-128内存会出现溢出问题(高到低转换)doublec=i//128.0(自动......
  • java基础03
    变量类变量static PublicclassDemo08{staticdoublesalary=2500;//static从属于Demo08这个类 方便调用//属性:变量//实例变量从属于对象;如果不自动初始化 ,这......