vue入门到精通(五)

3、响应式核心

3.1ref()

接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value

ref 对象是可更改的,也就是说你可以为 .value 赋予新的值。它也是响应式的,即所有对 .value 的操作都将被追踪,并且写操作会触发与之相关的副作用。

如果将一个对象赋值给 ref,那么这个对象将通过 reactive() 转为具有深层次响应式的对象。

将一个 ref 赋值给为一个 reactive 属性时,该 ref 会被自动解包

const count = ref(0)
console.log(count.value) // 0

count.value++
console.log(count.value) // 1

18_composition/80_composition_ref.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ref</title>
</head>
<body>
  <div id="app">
    count: {
  { count }}
    <button @click="add">加1</button>

    <br/>

    state.count: {
  { state.count }}
    <button @click="increment">加1</button>
  </div>
</body>
<script src="../lib/vue.global.js"></script>
<script>
  const {
      createApp, ref, reactive } = Vue
  // ref number string boolean 数组
  // reactive object
  createApp({
     
    setup () {
     
      // 1.ref 对象的值是可以更改的,也就是说你可以为 '.value' 赋予新的值
      const count = ref(0)
      const add = () => {
     
        count.value++
      }

      // 2.如果将ref赋值给 一个 reactive 属性时,该ref会被自动解包 - 了解
      const obj = reactive({
     }) // reactive 属性
      obj.count = count // ref赋值给 一个 reactive 属性
      // 该ref会被自动解包
      console.log(obj.count) // 0
      console.log(obj.count === count.value) // true

      // 3.如果将一个对象赋值给ref,那么这个对象将通过 reactive() 转为具有深层次响应的对象 - 了解
      const state = ref({
      count: 10 })
      const increment = () => {
     
        state.value.count += 1
      }

      return {
     
        count,
        add,
        state,
        increment
      }
    }
  }).mount('#app')
</script>
</html>

以后创建 非 对象类型的数据 使用 ref, 创建对象类型的数据建议使用 reactive

3.2computed ()

接受一个 getter 函数,返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 getset 函数的对象来创建一个可写的 ref 对象。

创建一个只读的计算属性 ref:

const count = ref(1)
const plusOne = computed(() => count.value + 1)

console.log(plusOne.value) // 2

plusOne.value++ // 错误

创建一个可写的计算属性 ref:

const count = ref(1)
const plusOne = computed({
  get: () => count.value + 1,
  set: (val) => {
    count.value = val - 1
  }
})

plusOne.value = 1
console.log(count.value) // 0

18_composition/81_composition_computed.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>计算属性</title>
</head>
<body>
  <div id="app">
    count: {
  { count }} - {
  { doubleCount }} - {
  { plusOne }}
    <button @click="add">加1</button>

    <br/>
    <button @click="updateComputed">改变计算属性的值</button>
  </div>
</body>
<script src="../lib/vue.global.js"></script>
<script>
  const {
      createApp, ref, computed } = Vue
  createApp({
     
    setup () {
     
      const count = ref(0)
      const add = () => {
     
        count.value++
      }

      const doubleCount = computed(() => {
      return count.value * 2 })

      const plusOne = computed({
      // 可读可写 - 了解
        get () {
      return count.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue入门精通》是一本关于Vue.js前端框架的学习指南。本书分为入门、进阶和精通三个部分,帮助读者从零基础开始学习,并逐步掌握Vue.js的核心概念和应用技巧。 在入门部分,书中首先介绍了Vue.js的基本概念,如组件、数据绑定、指令等。读者将学会如何搭建Vue项目、编写Vue组件,并了解Vue的基本语法和工作原理。通过实例演示和练习题,读者可以巩固对Vue基础知识的理解和掌握,为后续的学习打下坚实的基础。 进阶部分则重点讲解了Vue的高级特性和常用技巧。读者将学会如何使用Vue Router进行路由管理、Vuex进行状态管理、以及Vue CLI进行项目构建。此外,该部分还包括了对Vue的响应式原理、性能优化和国际化等方面的深入讲解,帮助读者进一步提升开发能力。 在精通部分,书中通过案例实战、源码解析等方式,深入剖析Vue.js的内部机制和高级用法。读者将学会如何进行自定义指令、混入(mixin)、过滤器(filter)等高级扩展,以及如何优化大型项目的性能和可维护性。此外,书中还介绍了与第三方库、服务端渲染等相关的内容,帮助读者更进一步地掌握和应用Vue.js。 总之,《Vue入门精通》是一本循序渐进、实例丰富的Vue.js学习教材,适合从零开始学习Vue.js前端开发者。通过系统地学习该书,读者可以逐步掌握Vue.js的核心知识和实际应用技巧,提升自己在前端开发领域的竞争力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值