01.05.01.DeepSeek:环境搭建篇(检索增强生成工具AnythingLLM: 安装配置)
2026/7/6 11:19:48
这篇文章的目标只有一个:让你在任何场景下,都能毫不犹豫地判断:这个地方该用ref,还是reactive
在 Vue3 里,响应式的本质不是变量,而是“引用关系”
⚠️:Vue 追踪的不是变量名,而是 ref.value 或 Proxy 内部的属性访问
constcount=ref(0)在模板里:
{{count}}// 自动解包在js/ts中:
count.value++constloading=ref(false)constpage=ref(1)constkeyword=ref('')constlist=ref<Item[]>([])list.value=res.data如果用 reactive:
constlist=reactive([])list=res.data// ❌ 直接失效只要你会写 = 重新赋值,就用 ref!!!
什么是状态,什么是模型???
constcurrentRow=ref<Row|null>(null)这是状态,不是业务结构
优点:
缺点:
constform=reactive({name:'',age:18})constform=reactive({name:'',age:0,role:''})原因:
conststate=reactive({loading:false,page:1,pageSize:10})这些数据:
优点:
缺点:
四个问题法(直接用)
| ref | reactive | |
|---|---|---|
| 会不会被整体替换 | 会 -> ref | 不会 -> reactive |
| 关心"对象是谁"or"字段怎么变"? | 是谁 -> ref | 字段 -> reactive |
| 会不会大量 v-model | 会 -> reactive | |
| 是不是长期业务模型 | 是 -> reactive |
form=newForm// ❌ 整体替换const{name}=form// ❌ 解构JSON.parse(JSON.stringify(form))// ❌ 深拷贝正确做法:
Object.assign(form,newForm)constc=count.value// ❌ 断开引用因为这里只是把count这个响应式的值给了c而已
constname=toRef(form,'name')const{name,age}=toRefs(form)它们的原理都是 把reactive内的变量都解构成响应式的ref包裹的变量