遇到這樣一個問題,我有個1個頁面A,一個from表單組件,一個form-item組件,
- 使用是這樣的,我在父組件A中使用 ,執行表單驗證一直提示沒有值
···
咱們先來講一講ref 和reactive的區別
ref
- 用來創建一個基本類型或單一值的響應式引用。
- 包裝一個值,返回一個對象,這個對象有一個 .value 屬性,存放真實的值。
- 對基本類型(字符串、數字、布爾等)特別有用。
- 也可以包裹對象,但需要訪問時用 .value。
import { ref } from 'vue'const count = ref(0)
console.log(count.value) // 0count.value++
reactive
- 用來創建一個響應式對象(通常是復雜數據,如對象、數組)。
- 直接將普通對象變成響應式,不需要訪問 .value。
- 不能用來包裝基本類型(會報錯或者行為異常)。
import { reactive } from 'vue'const state = reactive({count: 0,name: 'Tom'
})console.log(state.count) // 0state.count++
上方組件未更新的情況,后面切換成reactive就可以了
方面 | ref | reactive |
---|
響應式包裹對象 | 可以包裹任意類型,訪問要用 .value | 只能包裹對象或數組,不用 .value |
訪問數據 | 需要 .value | 直接訪問 |
包裹基本類型 | 設計來包裹基本類型 | 不支持基本類型(只能對象) |
嵌套響應式 | 自動解包,模板中直接用 .value | 對嵌套屬性自動響應 |
適用場景 | 單個值,簡單變量 | 復雜對象,狀態管理 |
直接解構的風險 | 解構會丟失響應式(需用 toRefs ) | 直接解構不會丟失響應式 |
你的場景如何選?
- 如果你需要一個整體響應式對象,建議用 reactive,它天然支持對象的嵌套和變化追蹤
- 如果是單個簡單變量,或者需要引用包裝(比如 ref),用 ref