我的日常开发记录日志
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)

我的日常开发记录日志

never give up
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)
  • html

  • css

  • javascript

  • vue

    • Vue
    • vue3基本类型ref初始化
      • 在 Vue 3 中,ref 可以用于创建不同类型的响应式数据。你可以使用 ref 来处理基本数据类型、对象、数组等。以下是一些不同类型的 ref 初始化示例:
        • 1. 基本数据类型
        • 2. 对象
        • 3. 数组
        • 4. 其他
        • 示例组件
        • 总结
        • 在 Vue 3 的 Composition API 中,ref<any> 用于创建一个可以持有任何类型值的响应式引用。any 类型表示该 ref 可以存储任何类型的数据,这样你可以在不确定具体类型的情况下使用 ref。尽管 any 提供了极大的灵活性,但它也失去了类型检查的优势。
        • 如何使用 `ref<any>`
        • 优缺点
        • 总结
    • vue3中尖括号和冒号的使用细则
    • vue3中为什么使用const不使用let
    • vue3中watch和compute是
    • route-view的作用
    • 关于import使用问题
    • 顶层await的理解
    • js中的常见的异步操作
    • vue中use理解
    • vue中config使用
    • vue中的env环境使用
    • 在html中直接使用vue
    • vue3中setup
    • vue3中ref和reactive的区别
    • vue3中watch
    • vue3中vite-config
    • vue3中组件的props类型
    • vite创建项目
    • vite使用tailwindcss
  • 小程序

  • Es6

  • 前端
  • vue
窝窝侠
2024-08-23

vue3基本类型ref初始化

# 在 Vue 3 中,ref 可以用于创建不同类型的响应式数据。你可以使用 ref 来处理基本数据类型、对象、数组等。以下是一些不同类型的 ref 初始化示例:

# 1. 基本数据类型

  • 字符串:

    import { ref } from 'vue';
    
    const stringRef = ref<string>('Hello, Vue!');
    console.log(stringRef.value); // 输出: 'Hello, Vue!'
    
    1
    2
    3
    4
  • 数字:

    import { ref } from 'vue';
    
    const numberRef = ref<number>(42);
    console.log(numberRef.value); // 输出: 42
    
    1
    2
    3
    4
  • 布尔值:

    import { ref } from 'vue';
    
    const booleanRef = ref<boolean>(true);
    console.log(booleanRef.value); // 输出: true
    
    1
    2
    3
    4

# 2. 对象

  • 普通对象:

    import { ref } from 'vue';
    
    const objectRef = ref<{ name: string; age: number }>({
      name: 'Alice',
      age: 30
    });
    
    console.log(objectRef.value); // 输出: { name: 'Alice', age: 30 }
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 动态对象:

    import { ref } from 'vue';
    
    const userRef = ref<{ name: string; age: number } | null>(null);
    
    // 动态赋值
    userRef.value = { name: 'Bob', age: 25 };
    console.log(userRef.value); // 输出: { name: 'Bob', age: 25 }
    
    1
    2
    3
    4
    5
    6
    7

# 3. 数组

  • 基本类型的数组:

    import { ref } from 'vue';
    
    const arrayRef = ref<number[]>([1, 2, 3, 4, 5]);
    console.log(arrayRef.value); // 输出: [1, 2, 3, 4, 5]
    
    // 修改数组
    arrayRef.value.push(6);
    console.log(arrayRef.value); // 输出: [1, 2, 3, 4, 5, 6]
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 对象数组:

    import { ref } from 'vue';
    
    const peopleRef = ref<{ name: string; age: number }[]>([
      { name: 'Charlie', age: 28 },
      { name: 'Diana', age: 35 }
    ]);
    
    console.log(peopleRef.value); // 输出: [{ name: 'Charlie', age: 28 }, { name: 'Diana', age: 35 }]
    
    1
    2
    3
    4
    5
    6
    7
    8

# 4. 其他

  • 可能为空的 ref:

    import { ref } from 'vue';
    
    const nullableRef = ref<string | null>(null);
    
    // 赋值
    nullableRef.value = 'Some value';
    console.log(nullableRef.value); // 输出: 'Some value'
    
    1
    2
    3
    4
    5
    6
    7

# 示例组件

以下是一个 Vue 3 组件的完整示例,展示了如何使用不同类型的 ref:

<template>
  <div>
    <p>String: {{ stringRef }}</p>
    <p>Number: {{ numberRef }}</p>
    <p>Boolean: {{ booleanRef }}</p>
    <p>Object: {{ objectRef.name }} - {{ objectRef.age }}</p>
    <p>Array: {{ arrayRef.join(', ') }}</p>
    <p>People:</p>
    <ul>
      <li v-for="(person, index) in peopleRef" :key="index">
        {{ person.name }} ({{ person.age }})
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const stringRef = ref<string>('Hello, Vue!');
    const numberRef = ref<number>(42);
    const booleanRef = ref<boolean>(true);

    const objectRef = ref<{ name: string; age: number }>({
      name: 'Alice',
      age: 30
    });

    const arrayRef = ref<number[]>([1, 2, 3, 4, 5]);
    const peopleRef = ref<{ name: string; age: number }[]>([
      { name: 'Charlie', age: 28 },
      { name: 'Diana', age: 35 }
    ]);

    return {
      stringRef,
      numberRef,
      booleanRef,
      objectRef,
      arrayRef,
      peopleRef
    };
  }
});
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

# 总结

  • 基本数据类型(字符串、数字、布尔值)可以直接用 ref 来创建响应式数据。
  • 对象和数组 也可以用 ref 来创建,并且在模板中可以直接使用。
  • 可能为空的 ref 允许你处理可能会为空的数据情况。

# 在 Vue 3 的 Composition API 中,ref<any> 用于创建一个可以持有任何类型值的响应式引用。any 类型表示该 ref 可以存储任何类型的数据,这样你可以在不确定具体类型的情况下使用 ref。尽管 any 提供了极大的灵活性,但它也失去了类型检查的优势。

# 如何使用 ref<any>

下面是一个使用 ref<any> 的示例,其中我们展示了如何在 Vue 3 组件中使用 ref<any> 来处理不同类型的数据。

# 示例 1: 使用 ref<any> 存储不同类型的数据

<template>
  <div>
    <p>String value: {{ anyValue }}</p>
    <p>Number value: {{ anyValue }}</p>
    <button @click="setStringValue">Set String</button>
    <button @click="setNumberValue">Set Number</button>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    // 创建 ref<any> 对象,初始值为 undefined
    const anyValue = ref<any>(undefined);

    // 设置不同类型的值
    const setStringValue = () => {
      anyValue.value = 'This is a string';
    };

    const setNumberValue = () => {
      anyValue.value = 123;
    };

    return {
      anyValue,
      setStringValue,
      setNumberValue
    };
  }
});
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 示例 2: 在 ref<any> 中存储对象和数组

<template>
  <div>
    <p>Current value: {{ anyValue }}</p>
    <button @click="setObjectValue">Set Object</button>
    <button @click="setArrayValue">Set Array</button>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    // 创建 ref<any> 对象,初始值为 undefined
    const anyValue = ref<any>(undefined);

    // 设置不同类型的值
    const setObjectValue = () => {
      anyValue.value = { name: 'Alice', age: 30 };
    };

    const setArrayValue = () => {
      anyValue.value = [1, 2, 3, 4, 5];
    };

    return {
      anyValue,
      setObjectValue,
      setArrayValue
    };
  }
});
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 优缺点

# 优点

  1. 灵活性: ref<any> 可以存储任何类型的数据,包括基本数据类型、对象、数组等。这使得它非常灵活,可以在动态场景中使用。

  2. 快速原型开发: 在开发初期或快速原型设计中,使用 any 类型可以减少类型定义的复杂性。

# 缺点

  1. 类型安全丧失: 使用 any 类型会失去 TypeScript 的类型检查优势。这可能导致运行时错误,因为你失去了对数据类型的验证。

  2. 难以维护: 大规模使用 any 类型会使代码变得难以维护和理解,因为你无法明确知道 ref 中存储的数据类型是什么。

# 总结

  • ref<any> 提供了极大的灵活性,但也丧失了 TypeScript 类型检查的优势。
  • 在实际开发中,建议尽量使用具体的类型来创建 ref 对象,以便充分利用 TypeScript 的类型安全特性。
  • 如果需要处理多种类型的数据,可以考虑使用联合类型(例如 ref<string | number>)来明确可能的数据类型。
在线编辑 (opens new window)
上次更新: 2025/02/25, 18:30:54
Vue
vue3中尖括号和冒号的使用细则

← Vue vue3中尖括号和冒号的使用细则→

最近更新
01
showprocess用法
04-29
02
vue3中尖括号和冒号的使用细则
04-29
03
sd使用
02-22
更多文章>
🖥️

© 2025窝窝侠 💌 豫ICP备20005263号-2 🛀 Theme by 💝 Vdoing && 小胖墩er

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×