本文用于记录Vue一些函数、语法等技巧。主要基于
Vue3
。持续更新中。。。
ref
和 reactive
都可以用于定义Vue3中的响应式对象,但有一些区别:
ref
支持所有的类型;reactive
只可用于引用类型,如Array
/object
/Map
/set
。ref
取值/赋值都需要加 .value
来操作数据;reactive
是不需要 .value
。reactive
是proxy
对象,不能直接赋值,否则会破坏响应式对象。(简单来说就是reactive
定义的对象不能被重新赋值,否则会改变原本的对象,就不再是原来的对象了,所以也就不具有响应式的特点了)下面是一些例子:
typescript// 正确:使用 ref 定义名为 ref_str 的字符串响应式对象
const ref_str = ref('aaa')
// 错误:reactive 不支持声明字符串类型数据
const reactive_str = reactive('aaa')
// 正确:使用 reactive 定义一个 Object 响应式对象,这个 Object 有一个 key 是 str
const reactive_str_obj = reactive({str:'aaa'})
// 正确:修改 ref_str 的值为 bbb ,取值/赋值需要使用 .value 操作
ref_str.value = 'bbb'
// 正确:修改 reactive_str_obj 的属性 str 的值为 bbb
reactive_str_obj.str = 'bbb'
// 错误:重新赋值 reactive_str_obj 是不对的,将会改变 reactive_str_obj 的对象,也就失去了响应式特点
// 如果你这么做了,所有针对原先reactive_str_obj对象的操作都会失效
// 如:监听reactive_str_obj、页面数据绑定reactive_str_obj等
reactive_str_obj = {str:'bbb'}
使用nextTick
函数
html<OblongItem :i="id" />
html<script setup lang="ts">
import { nextTick, onMounted, ref } from 'vue';
const id = ref<any>();
const props = defineProps(['i']);
onMounted(() => {
id.value = props.i;
nextTick(() => {
if (!id.value) {
return;
}
let span = document.getElementById('span-' + id.value);
if (span) {
span.innerHTML = '<h1>ABC</h1>';
}
});
})
</script>
<template>
<div>
<span :id="'span-' + id">
</span>
</div>
</template>
typescriptimport router from '@/router';
// uri为路由地址
router.push(uri);
typescriptimport router from '@/router';
// 路由地址应为 /uri?i=xxx,其中i为参数名,xxx为参数值
const i = router.currentRoute.value.query.i;
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!