Обидва створюють реактивний стан, за яким Vue стежить і перемальовує шаблон при змінах.
ref(value)- обгортка над будь-яким значенням: числом, рядком, об'єктом. Значення лежить у.value. У шаблоні.valueписати не треба - Vue розгортає ref автоматично.reactive(object)- реактивний проксі над об'єктом (чи масивом,Map). Поля читаються напряму, без.value.
import { ref, reactive } from 'vue';
const count = ref(0);
count.value++;
const form = reactive({ email: '', password: '' });
form.email = 'olia@example.com';
Обмеження reactive:
- Працює лише з об'єктами -
reactive(0)не має сенсу. - Не можна замінити цілком:
form = reactive({...})розриває зв'язок із шаблоном, бо шаблон стежить за старим проксі. - Деструктуризація губить реактивність:
const { email } = formдає звичайний рядок.
Через ці обмеження документація Vue радить ref як основний інструмент: його можна передавати у функції, повертати з composables, перезаписувати цілком (items.value = newItems), і поведінка завжди однакова. reactive зручний для згрупованого стану на кшталт форми, який не замінюють і не деструктуризують.