SOLID для реакт розробників: принцип відкритості/закритості (OCP)

Поделиться
HTML-код
  • Опубликовано: 26 янв 2025

Комментарии • 16

  • @AlexZhlobnytski
    @AlexZhlobnytski 12 дней назад

    Дякую! Успіхів

  • @prostoGraYou
    @prostoGraYou 2 месяца назад

    Дуже доречний приклад

  • @TheProfessionalGambler
    @TheProfessionalGambler Год назад +1

    Гарна аналогія з імютабл даними, сам до такого не дійшов 😅

  • @cookfasteatslow
    @cookfasteatslow 2 года назад +2

    Крутяк! Дякую!

  • @katesurovikina5509
    @katesurovikina5509 2 года назад +1

    Щиро дякую за відео! Також не мало корисної інформації в коментарях.

    • @AleksandrSugak
      @AleksandrSugak  2 года назад +1

      Так, в коментарях познається істина :), дякую!

  • @yuliasereda5671
    @yuliasereda5671 4 месяца назад

    можете будь ласка додавати посилання на код. дуже дякую

  • @tonymonttana7
    @tonymonttana7 2 года назад +1

    Привіт, дякую за відео, дуже корисне! У мене є питання, чому ти тут не використав "рендер пропс"?
    Якщо його використовувати, ми дамо більше свободи між дефолтним станом і кастомним.

    • @AleksandrSugak
      @AleksandrSugak  2 года назад +4

      Дякую! Дуже доречне питання! Ти прав, те саме можна зробити і через render props. Є 3 способа: передавати сам компонент, готовий елемент, та render prop. Останній спосіб працює краще коли host component (VideoPreview у моєму прикладі) має мати можливість змінювати поведінку компоненту, який йому передали у пропси, використовуючи для цього свій стейт (тобто передавати свій стейт як інпут у render prop функцію). У моєму випадку це не дуже потрібно, але я думаю що торкнусь цього питання у відео про ISP.

  • @TheProfessionalGambler
    @TheProfessionalGambler Год назад +1

    Треба ще не забувати рекомендацію реакту, для логіки яка повинна бути тільки в середині компонента - Hook names always start with use.
    Звичайно це робота для лінтера і в цьому прикладі такого немає, але десь може запутати)

    • @AleksandrSugak
      @AleksandrSugak  Год назад +1

      Дякую, так, в наступних відео я здається виправив це.

  • @dimitro.cardellini
    @dimitro.cardellini 2 года назад +2

    Привіт,
    як на мене, то передавати все в пропси стає трохи незручно.
    Я б, наприклад, хотів мати на рівні аплікації щось типу такого:
    const App = ({}) => (






    );
    Чому саме так? Тому, що дуже ймовірно, що нам знадобиться передавати додкові налаштування до VideoPreviewImage та/або до (Stream|Video)Description, і тоді у випадку з описаним підходом мені доведеться, або створювати зайві обгортки для компонентів PreviewImage/Description, або прокидати пропси до цих компонентів через VideoPreview, що вже буде дуже сильно порушвати SRP.
    Чи ідеальний такий спосіб, як я описав. Ні, неідеальний, через те, що він потребує використання контексту, але з точки зору зручності подальшого розвитку та і використання -- це найбільш зручний варіант.
    ну і, маленьке зауваження, щодо неймінгу. Навіть, якщо хука передається через пропси, то краще, щоб її назва все одно починалося з "use", це дозволить лінтеру без додаткових налаштувань відстежувати незмінність порядку виклику хуків.

    • @AleksandrSugak
      @AleksandrSugak  2 года назад +3

      Дякую! Передавати все через children нажаль не завжди можливо, тому що хост компонент може додавати своі обгортки та лейаут. Якщо так можна зробити, то children звичайно краще, бо дозволяє декларативно кастомізувати контент, як у вашому прикладі. Про лінтер не знав, це дуже доречно, дякую!

    • @dimitro.cardellini
      @dimitro.cardellini 2 года назад +3

      @@AleksandrSugak так, тоді можна використовувати slot-porops, тобто пропси з react-елементами:

    • @dfvhugfffyycfyu
      @dfvhugfffyycfyu 11 месяцев назад

      ​@@dimitro.cardellini​, мушу сказазати мені теж такий варінт був більше довподоби і я навіть переписав початковий варіант на slot-props + context. Але чи то при slot-props, чи при children виникають проблеми, коли доводиться звертатися до ISP (а це прийдеться зробити, бо як @AleksandrSugak правильно пояснює, ми компоненти на кшталт VideoPreviewImage без ISP не перевикористаємо). Тобто в результаті все одно доведеться або написати вреппер який буде прокидати потрібні пропси з контексту в умовний VideoPreviewImage, або знов ж таки використати render props. Тобто виглядає так, що render props це все одно найбільш зручний і гнучкий варіант коли мова йде про reusability UI компонентів.