vue3开发需要注意的问题

news/2024/10/21 9:54:15/

1、声明基本类型

数据声明现在的一般规则是:

  • 使用 reactive 代替 Object, Array, Map, Set
  • 使用 ref 代替 String, Number, Boolean
<script lang="ts" setup>import { reactive, ref } from 'vue';const num = reactive(0); // value cannot be made reactive: 0const obj = ref({});
</script>

对于原始值使用reactive会导致警告,但使用ref声明Object可以,并且将在内部调用reactive。

2、.value

该值在对象内部在 .value 属性下可用,但在模版中使用时,引用会被解包,这时.value不需要。但解包只在顶层属性有效。

<template><button @click="add">{{ num }}</button><div>{{ obj.foo }}</div> <!-- 1 --><div>{{ obj.foo + 1 }}</div> <!-- [object Object]1 -->
</template>
<script lang="ts" setup>import { ref } from 'vue';const num = ref(0);console.log(num); // { value: 0 }const add = () => {num.value ++;}const obj = { foo: ref(1) }</script>

3、不支持this

<script lang="ts" setup>import { useRoute, useRouter } from 'vue-router';import { useStore } from 'vuex';import { getCurrentInstance } from 'vue'const { proxy } = getCurrentInstance();const router = useRouter();const route = useRoute();const store = useStore();console.log(route.query.redirect)console.log(proxy.$refs.formRef)const gotoUserNote = () => {store.commit('permission/SET_UPDATE_CARD_SHOW', false);router.push('/agreement/user-note');};
</script>

4、router.currentRoute

router.currentRoute是ref响应式数据 要拿值的话需要.value,或者用unref转

<template><div>{{ currentRoute_false }}</div> <!-- --><div>{{ currentRoute_true }}</div> <!-- /test -->
</template>
<script lang="ts" setup>import { unref } from 'vue';import { useRouter } from 'vue-router';const router = useRouter();const currentRoute_false = router.currentRoute.fullPath //没有.valueconst currentRoute_true = router.currentRoute.value.fullPathconst currentRoute = unref(router.currentRoute);console.log(currentRoute.fullPath) // /test</script>

5、setup不支持

有一些 Options API 方法的属性在 script setup 中不受支持。

  • name
  • inheritAttrs
  • 插件或库需要的自定义选项
    需要在同一组件定义两个不同的脚本
<script lang="ts">export default {name: 'PyPicker',inheritAttrs: false,customOptions: {}}
</script><script setup>// script setup logic
</script>

或者不使用setup

<script lang="ts">import { defineComponent } from 'vue';export default defineComponent({name: 'PyPicker',inheritAttrs: false,customOptions: {},setup(props, { emit }) {}})

6、导入

使用defineEmits和defineProps (用于声明props),都不需要导入,当使用setup时,它们会自动可用。

<script lang="ts" setup>const props = defineProps({foo: String,});const emit = defineEmits(['confirm']);emit('confirm');</script>

7、refs

需注意:在列表数组上循环,并创建 itemRefs 数组。但如果不是在循环上获取ref,这时的下一个ref会覆盖上一个ref。

<template><ul><li v-for="item in list" ref="itemRefs" :key="item">{{ item }}</li><li ref="abitemRefs">内容1</li><li ref="abitemRefs">内容2</li></ul>
</template>
<script setup>import { nextTick, ref } from "vue";import { getCurrentInstance } from 'vue'const { proxy } = getCurrentInstance();const list = ref([1, 2, 3]);const itemRefs = ref([]);nextTick(() => {console.log(proxy.$refs.itemRefs)console.log(proxy.$refs.abitemRefs)})
</script>

http://www.ppmy.cn/news/381573.html

相关文章

每日算法(第二十二期)

先来回顾一下上期的问题及答案&#xff1a; 「三数之和」&#xff08;3Sum&#xff09;。以下是题目的描述&#xff1a; 给定一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c&#xff0c;使得 a b c 0&#xff1f;找出所…

RTK 定位回传数据转内网(局域网)mqtt协议--- 格林恩德 CR102 RTK 针对无人机巡检应用

先简单介绍一下CR102 格林RTK高精度设备&#xff0c;CR102接收机&#xff0c;集成高精度模组与4G&#xff0c; WIFI/蓝牙通信模组&#xff1b;双天线定位定向&#xff0c; 同时内置惯导&#xff0c; 输出加速度和姿态信息。支持4G/WIFI/蓝牙无线传输、 LAN网口传输&#xff1b;…

Android使用WebView与Native交互的三种方式 ( 附源码 )

先附上assets目录中html的源代码文件内容&#xff0c;下面的demo都是使用这几个文件&#xff1a; javascript.html: <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Carson</title><script>function callAn…

华为OD机试真题 JavaScript 实现【火星文计算】【2022Q2 100分】,附详细解题思路

一、题目描述 已知火星人使用的运算符为#、$&#xff0c;其与地球人的等价公式如下&#xff1a; x#y 2*x3*y4 x$y 3*xy2 其中x、y是无符号整数&#xff1b;地球人公式按C语言规则计算&#xff1b;火星人公式中&#xff0c;$的优先级高于#&#xff0c;相同的运算符&#x…

swagger Unable to find a model that matches key ModelKey

Unable to find a model that matches key ModelKey… 在开发RESTful API的过程中&#xff0c;使用swagger可以方便地进行API文档管理和测试。然而&#xff0c;有时候我们可能会遇到swagger无法找到匹配的模型的问题。本文将介绍如何解决swagger无法找到匹配的模型的问题&…

SpringCloud Eureka注册中心高可用集群配置(八)

当注册中心扛不住高并发的时候&#xff0c;这时候 要用集群来扛&#xff1b; 我们再新建两个module microservice-eureka-server-2002 microservice-eureka-server-2003 第一步&#xff1a; pom.xml 把依赖加下&#xff1a; <dependencies> <dependency…

Linux之进程掩码 umask

目录 Linux之进程掩码 umask 最大权限 umask unmask作用 语法格式 参数及作用 umask存放位置 案例 示例1 --- 在shell进程中创建文件 示例2 --- 修改shell umask值&#xff08;临时&#xff09; 示例3 --- 修改shell umask值&#xff08;永久&#xff09; 示例4 ---…

Windows驱动开发第5课(完善驱动框架-使其能够正常卸载)

在上一节课我们已经成功加载了一个驱动&#xff0c;但是不能卸载。这节课来完善驱动框架&#xff0c;使其能够正常卸载。这里直接上代码吧&#xff0c;比较直观。代码如下&#xff1a; #include <ntifs.h>void DriverUnload(PDRIVER_OBJECT DriverObject) //第5课新增代…