thehighhomie
@thehighhomie

VueJS & fabric.js: как добиться реактивности?

Я добавил библиотеку fabric.js в VueJS и инициализировал ее в компоненте AppCanvas, в хуке mounted.

Добавил для теста добавления кнопку "Добавить элемент".

Добивал состояние "elems" и мутацию "addElems" в Vuex и использовал их в компоненте, однако реактивности нет - сама мутация отрабатывается, но цикл в хуке mounted не обновляется, то есть элементы не добавляются.

То же самое происходит, если я вместо хранилища использую пропсы.

Вот песочница

Подскажите пожалуйста как добиться реактивности?
  • Вопрос задан
  • 894 просмотра
Решения вопроса 3
Hocopor
@Hocopor
Ищу интересную работу
Если я правильно понял, то вы забыли перерисовать канвас. (По watch: elements), например)
Upd: Не, это я не увидел. Минутку.

Дык все работает)
Ответ написан
@imhuman
Сделай canvas отдельным компонентом с логикой отрисовки. А в родительском компоненте оставь логику добавления картинок и цикл с новым компонентом, в каждый из которых будешь передавать объект через props.
Типа такого
<template>
  <div>
    <CCanvas v-for="(item, index) in elems" :key="index" :t="item" />
    <span @click="onClick">Добавить элемент</span>
  </div>
</template>

Тогда и реактивность сохранится

на скорую руку https://codesandbox.io/s/3qrkqw17l5
Ответ написан
0xD34F
@0xD34F Куратор тега Vue.js
Делать watch на elems. Код создания картинок вынести в метод, который дёргать в mounted и в watcher'е. Как-то так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы