reactive(...)

4 阅读1分钟

 reactive(...)适合:对象/表单/多字段状态,不用 .value

<template>
  <input v-model="form.username" placeholder="用户名" />
  <input v-model="form.password" placeholder="密码" type="password" />
  <button @click="login">登录</button>

  <pre>{{ form }}</pre>
</template>

<script setup lang="ts">
import { reactive } from 'vue'

const form = reactive({
  username: '',
  password: '',
})

function login() {
  console.log(form.username, form.password)
}
</script>

要点:

  • reactive 返回的是一个响应式对象,访问字段直接 form.username
  • 适合表单这种“多个字段一起管理”的场景

简单规则:

  • 单个值 / 基础类型:用 ref
  • 一坨字段组成的对象:用 reactive
  • 两者可以混用:比如 
const state = reactive({
loadingfalse,
list: [] as User[]
})
  • state.loading 是 boolean
  • state.list 被明确标注成 User[](否则空数组 [] 有时会推导得不够精确)

可以这样配套定义 User:

type User = { id: number; name: string }

const state = reactive({
  loading: false,
  list: [] as User[],
})

还有一种更“类型安全”的写法(可选)

用泛型把结构一次性约束住(避免随手 as 断言):

type User = { id: number; name: string }

const state = reactive<{ loading: boolean; list: User[] }>({
  loading: false,
  list: [],
})

两种都能用;第一种更常见更快写,第二种在团队严格规范时更稳。