个人博客 个人博客
首页
  • 前端
  • 后端
  • Git
  • Docker
  • 网络
  • 操作系统
工具
阅读
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

董先亮

前端react开发
首页
  • 前端
  • 后端
  • Git
  • Docker
  • 网络
  • 操作系统
工具
阅读
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Vue

    • 响应式API
      • ref 与 reactive
        • 社区推荐写法
        • reactive 注意点
      • toRefs
        • Vue3中shallowReactive 与 shallowRef 的用法
    • vite环境变量
    • 侦听
    • 样式
    • 多环境配置
    • 实现页面缓存
    • 组件封装
    • nextTick
    • 组件传值
    • 批量导入
    • 插槽
    • scoped与deep原理
    • v-model
    • vue-router
    • 项目全局
    • 自定义hook
  • React

  • 前端框架
  • Vue
NeverStop1024
2022-06-12
目录

响应式API

# ref 与 reactive

ref 与 reactive与react的useState类似,返回一个响应式对象,官方推荐ref用来存简单类型,reactive存储复杂类型

setup(){
  const count = ref(0) // js简单类型
  const obj = reactive({ count: 0 }) // js复杂类型(对象,数组)
}
1
2
3
4

# 社区推荐写法

社区推荐一个组件,使用一个reactive,不去定义多个ref

<template>
  <span>{{tagViewHeight}}</span>
  <span>{{skyList.a}}</span>
</template>
  setup() {
    // 之前的做法需要定义5个ref,这样使用一个reactive,统一对状态进行管理
    const state = reactive({
        tagViewHeight: '',
        skyList: {a: 1},
        dBtnList: [1,2,3],
        myCharts: [],
    });
    
    return {
       ...toRefs(state) 
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# reactive 注意点

  1. 不能重新赋值,重新赋值失去了响应式
setup () {
  let person = reactive({ name:'刘备'})
    // 调用changePerson方法,可以看到页面使用的person.name字段并不会更新
    function changePerson(){
      person={name:'张飞'}
    }
    return {
      person,
      changePerson
    }
    }
1
2
3
4
5
6
7
8
9
10
11

正确做法:

setup () {
  let person = reactive({ name:'刘备'})
    function changePerson(){
      // 单个字段去赋值
      person.name= '张飞'
    }
    return {
      person,
      changePerson
    }
}
1
2
3
4
5
6
7
8
9
10
11

# toRefs

对响应式对象进行包装,确保使用扩展符解构后,仍具有响应式
参考:

  • VUE3 reactive与toRefs函数 (opens new window)
<template>
  <span>{{foo}}</span>
  <span>{{bar}}</span>
</template>

setup () {
  const state = reactive({
    foo: 1,
    bar: 2
  })
  // ......
  
  return {
    ...toRefs(state), 
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# Vue3中shallowReactive 与 shallowRef 的用法

Vue3中shallowReactive 与 shallowRef 的用法 (opens new window)

编辑 (opens new window)
上次更新: 2022/06/17
vite环境变量

vite环境变量→

最近更新
01
mock使用
07-12
02
websocket即时通讯
07-12
03
前端面试题
07-09
更多文章>
Theme by Vdoing | Copyright © 2022-2023 NeverStop1024 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式