Друкарня від WE.UA

Незалежні та перевикористовуванні компоненти в VueJS

Привіт, я радий бачити тебе у моєму блозі.
Сьогодні я б хотів поговорити про незалежних і перевикористовуваних компонентах у VueJS.


Оскільки ми в студії використовуємо цей Фреймворк на постійній основі - ми прийшли до висновку що такі компоненти це найбільш зручний і швидкий спосіб розробки та прототипування додатків.
Такий вид компонентів дуже нагадує нам конструктор Lego.
Всі ми любили в дитинстві цю іграшку, і всі ми збирали свої конструкції з нього. Так чому б і зараз не продовжити це веселощі та не збирати так само наш User Interface !?

Основні якості

Для початку, нам варто визначити основні якості таких компонентів.

  1. Компонент має бути без стану (stateless), а стан має бути передано батьком.

  2. Компонент зобов'язаний виконувати лише одну задачу.

  3. Дозволена будь-яка вкладеність компонентів.

  4. Компоненти не повинні бути логічно перевантажені.

Давайте я розповім вам докладно про ці пункти.

Компоненти без стану

Незалежний компонент не може мати свій стан.
Щоб наочно продемонструвати вам, уявімо що у нас є список користувачів.
Для нашого рішення ми будемо використовувати 2 компоненти, UsersList і Table.

Думаю вже зрозуміло що Table це наш незалежний компонент який вміє створювати списки.
У сучасному UI різниця між таблицею з користувачами й таблицею з продуктами (наприклад) складається тільки в кількості полів в таблиці.

Тут нам на допомогу і приходять різні UI бібліотеки, як, наприклад: Vuikit, Vuetify або Buefy.

Вони містять безліч готових компонентів для використання.

І так, наш Table це універсальний компонент який приймає на вхід поля у вигляді масиву ключів зі значеннями для label і дані.
Дані ж представлені у вигляді масиву об'єктів де кожен атрибут об'єкта відповідає ключу масиву з полів.
В цьому випадку ми просто створюємо таблицю на підставі цих даних і відмальовуємо її.

За що ж відповідає наш UsersList?!
Його завдання якраз і полягає в тому, щоб зібрати дані та передати їх нашому незалежному компоненту.

Якби Table збирав дані про користувачів він би вже був пов'язаний з контекстом програми, але не міг бути перевикористаним в інших проєктах.

Підсумок: Незалежні компоненти не можуть мати стану для запобігання зв'язування контексту з бізнес-моделлю додатки.

Не дуже смарт компонент

Наші незалежні компоненти не дуже уми. Вони вміють виконувати лише 1 поставлену їм завдання.
Іноді їх завдання банально прості, а іноді комплексні.

Коли ми розробляли форми в одному з проєктів, ми обернули простий input в компонент.
Він брав в параметрах кілька опцій:

  • small (boolean) для зменшення розміру поля (застосовувався інший клас)

  • icon (string) для додавання текстової іконки в кінці поля

  • tooltip (object) для позиціювання та контенту вспливаючих підказок.

  • І безліч інших, які якимось чином видозмінили його зовнішній вигляд.

Але він завжди виконував лише одну задачу - обробляти введення користувача, форматувати ці введення для показу і передавати дані через подію input вгору батькові чи матері (подія input передає дані в директиву v-model яка була підключена до цього компоненту).

Таким чином компонент ні перевантажений логічним призначенням його в проєкті, а був його незалежною частиною.

Підсумок: Усі перевикористовувані компоненти повинні виконувати лише одну логічну задачу для спрощення їх зв'язування з контекстом додатки.

Компонент компонентом критий

Звичайно іноді перед вами стане завдання використовувати незалежні компоненти один в одному.
Оскільки нам дозволена будь-яка вкладеність компонентів - ми можемо, наприклад використовувати наш компонент ConfirmButton в компоненті з першого прикладу Table.

При такому підході ми зможемо розширити базові можливості Table, але з іншого боку та ускладнити його логіку.

Що я маю на увазі під "ускладнити".
Тепер будь-які параметри які можуть бути передані в кнопку, так само повинні бути передані в таблицю, що ускладнює контроль даних переданих в компоненти.

Для розв'язання даної проблеми, я настійно рекомендую вам використовувати slots.
Такий підхід дозволити вам, наприклад додати SubmitButton в Table не зв'язуючи їх.
Все зв'язування буде вже відбуватися в батьку (UsersList) який з легкістю може контролювати вкладеність даних.

Підсумок: Якщо ваші компоненти не залежать на додаткових параметрах і логічно вписуються в компонент - сміливо використовуйте вкладеність. В іншому випадки потрібно використовувати slots.


Четвертий пункт нашого списку добре описаний в останніх двох, і я не думаю що варто якось детально його розглядати.

Підсумки

Як ми вже зрозуміли, такі компоненти дуже легко винести в окремий пакет і використовувати в будь-якому своєму проєкті.

Покриваючи компонентами класами з css фреймворків - ми можемо створювати інтеграцію з будь-яким доступним варіантом.

А якщо ви використовуєте власне рішення - такий пакет компонентів прискорить процес розробки ваших додатків.

Дякую за увагу <3


p.s. Ця публікація є репостом оригінальної статті.

p.s.s. Це моя перша спроба у публікування, тож буду радий любій критиці.


Цікавитесь IT-шечкою?! Долучайтесь до україномовної спільноти про IT у Діскорд: UA IT Спільнота

Статті про вітчизняний бізнес та цікавих людей:

  • Як побудована програма Meest China Academy

    Курс про товарний бізнес охоплює різні етапи роботи: від пошуку ідеї до перевірки товару, логістики та масштабування. Програма Meest China Academy містить 17 модулів, які послідовно розкривають ці теми без зведення всього навчання до однієї універсальної поради.

    Теми цього довгочиту:

    Meest
  • Які технології використані в Айфон 17

    Айфон 17 поєднує OLED-дисплей із частотою до 120 Гц, чип A19, дві камери Fusion 48 Мп і швидке заряджання через USB-C. У COMFY можна купити Айфон 17 з накопичувачем на 256 або 512 ГБ, вибравши конфігурацію відповідно до обсягу фото, відео та застосунків

    Теми цього довгочиту:

    Iphone 17
  • Як вибрати вживаний iPhone: коротке керівництво для розумної покупки

    Вторинний ринок смартфонів Apple активно зростає, і питання, як вибрати вживаний iPhone, стає актуальним для дедалі більшої кількості користувачів. Правильний підхід дозволяє отримати бу iPhone з актуальною iOS і доброю камерою за помітно нижчу ціну, ніж у нових пристроїв.

    Теми цього довгочиту:

    Iphone
  • Як подолати жіночу безплідність за допомогою донорських яйцеклітин

    Діагноз "безпліддя" рідко звучить як вирок одразу. Для багатьох жінок саме в цей момент вперше звучить словосполучення "донорські яйцеклітини" — і це часто не кінець шляху до материнства, а якраз новий, реальний шанс.

    Теми цього довгочиту:

    Донорство
  • Як заспокоїти зубний біль і чому самолікування може призвести до операції?

    Раптовий біль у зубі може призвести до порушення сну та ускладненого вживання їжі. Люди часто приймають таблетки, роблять полоскання або лікуються народними засобами. В таких випадках не варто відкладати візит до стоматолога, адже можуть з’явитись ускладнення.

    Теми цього довгочиту:

    Стоматологія
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Vladyslav G.
Vladyslav G.@admiralmiki

Web Application Dev & CEO

1Довгочити
40Перегляди
1Підписники
На Друкарні з 8 червня 2023

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: