use-to-refs-instead-of-plain-destructing.png
Шаблон кодуVue.js

Vue toRefs(): збережіть реактивність при destructuring reactive()

Звичайне destructuring властивостей reactive() може від'єднати отримані значення від реактивного об'єкта. toRefs() створює refs, які залишаються пов'язаними з початковим станом.

reactive() робить об'єкт реактивним, але звичайне destructuring дістає поточні значення його властивостей у нові локальні змінні.

Для примітивних значень це може розірвати реактивний зв'язок. Якщо потрібно destructuring і водночас зберегти зв'язок із початковим станом, використовуйте toRefs().

Замість звичайного destructuring використовуйте toRefs()

До
javascript
const state = reactive({    page: 1,    search: '',}); const { page, search } = state; state.page = 2; console.log(page); // 1
Після
javascript
const state = reactive({    page: 1,    search: '',}); const { page, search } = toRefs(state); state.page = 2; console.log(page.value); // 2

У першому варіанті page отримує число 1. Це окреме локальне значення, тому наступна зміна state.page його не оновлює.

toRefs(state) натомість створює ref для кожної властивості. Такий ref залишається пов'язаним із відповідною властивістю початкового реактивного об'єкта.

JAVASCRIPT - toRefs() зберігає зв'язок зі state
const state = reactive({    page: 1,    search: '',}); const { page, search } = toRefs(state); page.value = 3; console.log(state.page); // 3 state.search = 'vue'; console.log(search.value); // "vue"

Зміна через page.value змінює state.page, а зміна state.search одразу відображається в search.value.

Тобто toRefs() не копіює стан. Він створює refs, які посилаються на властивості реактивного об'єкта.

У JavaScript для ref потрібний .value. У Vue template refs автоматично розгортаються, тому там зазвичай можна використовувати page або search без .value.

Коли toRefs() потрібний

  • потрібно destructuring кількох властивостей із reactive();
  • ці властивості мають залишатися реактивними;
  • потрібно повернути реактивний об'єкт із composable і дозволити зручно destructuring його властивостей.

Якщо ви продовжуєте використовувати state.page і state.search напряму, toRefs() не потрібний.

Звичайне destructuring бере значення з reactive(). toRefs() дає окремі refs, які залишаються пов'язаними з початковим станом.

#vue-js #vue-3 #composition-api #reactivity #to-refs #reactive #javascript

Схожі поради

vue-nexttick-wait-for-dom-instead-of-settimeout-tip.pngПорада
Переглянути пораду
#next-tick #vue-js #vue-3 #composition-api #dom #reactivity