Назад к вопросам
Senior
5
В чём разница между ref и shallowRef во Vue.js? Когда лучше применять shallowRef?
Компании, где спрашивали
АЛМИ Партнер
Ответ от нейросети
sobes.tech AI
Во Vue.js ref и shallowRef создают реактивные объекты, но отличаются глубиной реактивности.
-
ref делает реактивным значение глубоко: если это объект, Vue рекурсивно делает реактивными все вложенные свойства.
-
shallowRef создаёт реактивность только на верхнем уровне — сам объект отслеживается, но вложенные свойства не становятся реактивными.
Когда применять shallowRef:
- Если у вас есть большой или сложный объект, который редко меняется целиком, и вы хотите избежать накладных расходов на глубокую реактивность.
- Когда вы работаете с объектами, которые сами по себе уже реактивны или управляются вне Vue (например, сторонние библиотеки), и не хотите, чтобы Vue делал их свойства реактивными.
- Для оптимизации производительности, чтобы избежать лишних реактивных обёрток.
Пример:
import { ref, shallowRef } from 'vue';
const deep = ref({ a: 1, b: { c: 2 } });
const shallow = shallowRef({ a: 1, b: { c: 2 } });
// Изменение deep.value.b.c будет отслеживаться и вызовет обновление
// Изменение shallow.value.b.c — нет, так как вложенный объект не реактивен
Таким образом, shallowRef полезен, когда нужна реактивность только на верхнем уровне, а вложенные данные не должны вызывать реактивных обновлений.