Sobes.tech
Назад к вопросам
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 полезен, когда нужна реактивность только на верхнем уровне, а вложенные данные не должны вызывать реактивных обновлений.