I know Im randomly asking but does someone know of a trick to log back into an Instagram account..? I was dumb forgot the account password. I would love any assistance you can offer me.
@Pedro Leonard I really appreciate your reply. I got to the site through google and Im in the hacking process now. Looks like it's gonna take a while so I will reply here later with my results.
Отлично объясняешь - у тебя, прям, талант! Это всё здорово в синтетическом примере, когда мы считаем задним умом. А по факту может быть кнопка с динамическим бекграундом и анимацией, и снова проблема - куда вставлять изменения (а там ещё принцип Single Responsibility). И иногда идея чистого наследования начинает проигрывать ad hoc. А иногда проще сделать отдельные сущности - так и связанность меньше, и зависимостей нет никаких. Просто стоит помнить, что любой принцип может не подходить для текущей задачи. Иначе можно явно нарваться на Фабрику Фабрик и Fizzbuzz enterprise edition
оо, был такой опыт на проекте. Буквально была кнопка и я как хороший программист, пытался учесть все возможные способы ее использования, от чего пропсы кнопки дико росли с каждой последующей версткой новых компонентов. А потом пришел лид и сказал "убери это нахер и делай отдельные компоненты таких кнопок". Я тогда послушался, но не понял смысла такого сокращения. В целом там это и было не так реализовано, как тут в видео и уже сейчас я ясно представил, как это все еще можно было упростить и улучшить. Но я только сейчас понял, как важно понимать все принципы. Ну еще важно обьяснять почему надо делать, а не так. Если бы он мне сразу тогда донес свою мысль, то мне не пришлось бы узнавать случайно прямо сейчас.
действительно многие не могут нормально рассказать почему лучше делать так. Более того я когда то спрашивал у лида "а почему так?", на что мне отвечали, "я чувствую так лучше". По факту их опыт им подсказывал, что так будет меньше проблем, но они не могли до конца осознать свой опыт и сформулировать это во внятную мысль, которой можно поделиться и убедить коллег, что так будет лучше Поэтому, на этом канале я стараюсь не просто рассказывать, как это работает, а рассуждать как использовать можно тот или иной инструмент, и конечно аргументировать свои мысли, хотя они могут быть иногда и ошибочными)
@@it-sin9k зато Вас интересно слушать и подача материала все же необычная. потому и смотрю Ваши выпуски (и не только их конечно), когда необходимо на что-то отвлечься.
Не очень то и гибкий подход. Вы унаследовали DefaultIconButtonWithBadge от DefaultIconButton. Но что, если в будущем и у CallIconButton появится badge? Придется создавать еще один дочерний класс. На практике это все может перерасти в кучу параллельных иерархий с дублирующимся кодом. А в остальном видео - огонь, очень доходчиво объясняете.
А вот здесь хорошо! Даже отлично. Очень правильно было отойти от привязки к наследованию классов. Здесь яркий пример создания под-типов без классов и без наследования.
Я как бэкендщик (будущий) смотрю этот видос, и меня аж трясёт (мем с пёсиком: мхм-мхм, кнопочка должна теперь выводить циферки) Но видос полезный, ведь принцип работает одинаково и там, и там
пример с наследованием кнопок идейно крут, но только для этого лучшего всего подойдет не наследование, а порождающие паттерны, например декоратор, а так же композиция таким образом ты делаешь "декоратор" - компонент обертку, Button, который выступает просто оберткой и получает children, потом ты делаешь кучу иконок и все такое, потом делаешь компонент "декоратор" WithBadge - который добавляет обертку твоему children и устанавливает бейджик в правом верхнем углу, теперь ты можешь это комбинировать - делать композицию: чем это лучше? завтра приходит дизайнер и говорит, что мне бы бейджик добавить для тэга, или аватарки пользователя, а ты просто берешь и оборачиваешь :) Composition > Extends
По этому и CSS это CSS (Cascading Style Sheets), на наследовании весь CSS, и до css in js или модулей нужно было писать так чтобы не конфликтовали и плюс расширялись. Спасибо за урок
Спасибо!) мы просто не продвигаем канал на финансовой основе) возможно были бы совсем другие результаты) поэтому можете поделиться полезными видео с коллегами) мы будем очень благодарны)
мы начинали английскую версию, там даже приличное кол-во видео запаблишено) но из-за недостаточного английского и свободного времени, пришлось поставить на паузу, пока бюджет на это дело не появится) Пока вот пару видео можете пошарить коллегам) ruclips.net/video/CICzqtQhL7U/видео.html
@@it-sin9k Спасибо! Круто что про Reconciliation есть на английском. Будем объяснять почему key важно делать уникальным. И вообще что там под капотом 👍🏻
Композиция компонентов или render props были бы даже лучшим вариантом, чем DefaultIconButtonWithBadge. Тут видится вообще 3 компонента: кнопка, внутренняя иконка и бэдж
Очень интересно) Для добавления budge лучше сделать без создания новой кнопки, в просто добавлять кнопку в качестве children при использовании budge компонента?
Спасибо за видео! Вечно забываю смысл этого принципа из-за не очень говорящего названия) Получается, если следовать этому принципу, то базовая уточка не должна уметь летать? Или механической утки не должно существовать?
Оба варианта работают. Если базовая утка перестанет уметь летать, то принцип не будет нарушаться. Либо механическая утка не будет наследоваться от базовой утки.
описание идеи вроде ясно, но с реализацией остались вопросыю ведь помимо чисто стилевых изменений у наследников появляются и логические изменения, и даже разметка меняется. Да и такое дерево наследия, всё таки выглядит в реальных проектах более монструозно, и противоречит некоторым рекомендациям избегать наследования в пользу композиции.
На самом деле, то что обсуждается в этом видео, это скорее ближе к композиции чем к наследованию. Есть еще одно видео, в котором я использовал похожий подход, чтобы разложить попапы по полочкам) ruclips.net/video/20ZVV5ujkFw/видео.html
получается что практически создано несколько кнопок которые чисто теоретически наследуются от базовой. к тому же код наследования не показан, что в итоге предполагает что просто изменены стили. ибо реальное наследование тут не имеет смысла. хотя радость в одном- проверка не нужна, поскольку кнопки по сути созданы заново и отдельно. так в чем тогда смысл? и без кода для тех кто еще не делал наследование все это слова с картинками. ведь тут и новички смотрят, для которых возможно само понятие наследование уже не так просто. в итоге для них все это осталось не более чем картинка с утками и кнопками без понимания что же произошло в реальности. когда я первый раз делал наследование элемента, то хотя и прошло много времени, но помню как же все это было странно и непонятно. и только после того как этот инпут запустил, понял весь механизм. поэтому было бы неплохо добавить хотя бы код любым образом или даже выпустить более подробное видео с тем же наследованием элементов, если такового еще не имеется.
Спасибо за подробный комментарий :) Мы изначально решили делать контент направленный не на новичков, потому что для них материалов в интернете огромное количество. Идея видео была, скорее показать, как этот паттерн будет выглядеть в рамках фронтенда
Так как реакт продвигает композицию вместо наследования, то это все у нас будут просто разные компоненты, так ведь? (Возможно только с общим файлом стилей, но разными .tsx файлами🤔)
Да, конечно это разные tsx файлы. Более подробно я разбирал как это может выглядеть на примере попапов в этом видео. Идея примерно такая же: ruclips.net/video/20ZVV5ujkFw/видео.html
подскажи пжл, я не совсем понял как создавать прототип функционального компонента, чтобы основываться на его текущей реализации и добавлять еще новую.У меня есть только идея делать это через HOC
Я обычно действую очень ситуативно. Например, если те же кнопки выглядят совершенно по разному, я бы разнес это просто в разные компоненты. Если же мы хотим просто добавить существующей кнопке, например состояние isActive (у самой кнопки физически такого состояния нет). Я возможно создал бы еще один компонент, который в return будет возвращать первоначальную кнопку и передал бы className ему что то типа такого classNames({ [styles.active]: isActive }). Таким образом кому нужна кнопка с активным состояние использовал бы эту кнопку, а кому состояние такое не нужно использовал бы базовую кнопку
у меня такой вопрос, допустим у нас есть базовая кнопка: IconButton со своими стилями из ../UiKit/IconButton/style.css затем у нас появилась необходимость в новой кнопке: CallIconButton, и для этого мы создаем еще компонент CallIconButton куда подключаем стили из ../UiKit/CallIconButton/style.css, то есть каждый раз при необходимости мы создаем новый компонент с новыми стилями? я правильно понял?
Смотря в какой ситуации. Если вы хотите расширить функционал текущей кнопки, то создаете новую и дописываете ей нужные стили только. Есть еще один пример с попапами, где я делал по такому же принципу, может станет немного понятнее: ruclips.net/video/20ZVV5ujkFw/видео.html
А как быть с изменениями в базовый компонент IconButton? Стараться не вносить изменения, а расширять его (знакомый принцип)? Ведь иначе придется проверять всех остальных потомков. Возможно тут будет полезно скриншот-тестирование. Сорри, если я пропустил ответ в видео)
идея таких подходов заключается в том, что чем ближе компонент к базовому, тем реже он должен изменяться. Если так не получается, вероятно либо у вас короткое дерево насследования, либо составлено не совсем удачно наследование. И конечно же скриншотное тестирование избавит вас от пробрем с регрессией. Однозначно рекомендую
тут не столько был рассказ о насследовании, которое стоит использовать в повседневном проекте, сколько скорее рассказать про то как работает этот принцип. В данном случае "псевдо" наследование заключалось, что мы просто использовали кнопку как обычный компонент и добавляли какие-то дополнительные настройки
Создаём обычную кнопку с минимальным набором стилей и пропсов, для расширения оставляем две вещи: динамический класс и контент кнопки как children, для кнопки с иконкой мы прокидываем иконку в children, и если нужно красить то прокидываем модифицирующий класс
мы пока еще не рассматривали варианты для пожертвований) но для нас особое значение имеет то, что наш контент вызывает желание поддержать проект!) Это вероятно лучшая похвала) Спасибо!)
Привет) мы прислушались к твоему вопросу и создали целых 2 площадки для поддержки проекта, возможно разным людям в разных местах удобнее поддерживать) Если еще есть советы по тому как мы оформили или выставили настройки дай знать) Поддержать проект можно здесь: Patreon: www.patreon.com/ITSin9k BuyMeACoffee: www.buymeacoffee.com/XcBPY5W
Механическая утка должна наследовать миксином от утки и какого либо механизма, лучше через интерфейсы, поведение частично берётся от утки, частично от механизма… а просто наследование от утки некорректно, именно поэтому лис и нарушается
Но ведь изначально не использовалось вообще никакого наследования. Т.е принцип не нарушался - его просто негде было применить. Потом автор внедрил наследование сразу с применением LSP. По-моему не очень показательно. ps: а вот пример с утками зачётный
По-моему принцип подстановки Барбары Лисков тут притянут за уши. Я его понимаю как наследуемый класс не должен расширять интерфейс, а только менять поведение базового интерфейса, чтобы можно было указывать в аргументах базовый класс или интерфейс. В приведённом примере и близко нет такого требования, везде используется конкретная имплементация. В итоге получили несколько параллельных иерархий: обычные иконки, иконки с бэджами и иконки для звонков -- а дальше все остальные комбинации. Это очень плохое решение, сам обжигался на нём несколько раз. Лучше иметь иерархию новых признаков, чем несколько иерархий с признаками (см. паттерн мост).
Хмм, я вот перечитал несколько раз. Возможно я ошибался в понимании этого принципа. Попробую на свежую голову почитать побольше :) Спасибо за комментарий!
Я, конечно, не претендую на истину в последней инстанции, но возьму на себя смелость высказать конструктивную критику. Во-первых, краткая формулировка принципа подстановки от Роберта Мартина на человеческом языке - "функции, использующие базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом". Во-вторых, этот принцип описывает правильный полиморфизм, а не правильное наследование. В-третьих, лично я вообще против этого принципа, так как он ломает напрочь саму основу ООП. И я не могу придумать ситуацию, когда может понадобится внезапно подставлять подкласс туда, где изначально был родительский класс. Если вам внезапно в объекте родительского класса понадобился метод одного из его наследников, значит у вас что-то не так с архитектурой приложения. В-четвёртых, проблема с появлением кнопки с количеством пользователей решалась добавлением 2 свойств, которые нужно было предусмотреть ещё на этапе добавления свойства theme, а именно добавить свойство css_class вместо theme и content вместо badge, а в них уже в виде объектов хранить и тему и тип контента (bagde/numbers/emoji) и сам контент. В-пятых, на кнопках звонка badge тоже нужен. Как ты дашь понять пользователю, что его микрофон выключен или за(mute)н или камера не определяется или поставлена на паузу? В-шестых, в качестве цветовой темы правильнее и логичнее использовать переменные css, а не свойства в коде js. В-седьмых, обнуление css-свойств для класса - это, конечно, ни разу не нарушает принцип reuse, да... размещение шрифтовой иконки в виде тега вместо псевдоэлемента before с абсолютным позиционированием - это, конечно, сильно... Но спишем это всё на демонстрационный пример. Дальше я уже окончательно перестал понимать, что происходит на экране и кто все эти Button. Резюмирую. Мне больно смотреть, как люди надрачивают на одну из букв твердотельника с сомнительной полезностью, при этом просирая наглухо принципы DRY, разделения ответственности между представлением и логикой, здравого смысла и юзабельности собственного инструмента.
У тебя лучшее объяснение принципов SOLID что я видел) спасибо
Спасибо за такую высокую оценку!)
200%, I have never seen someone explains SOLID at front end so well
Немчинского посмотри. А это - дичь какая-то.
Одно из простых объяснений что я слышал) спасибо :)
I know Im randomly asking but does someone know of a trick to log back into an Instagram account..?
I was dumb forgot the account password. I would love any assistance you can offer me.
@Pedro Leonard I really appreciate your reply. I got to the site through google and Im in the hacking process now.
Looks like it's gonna take a while so I will reply here later with my results.
@Pedro Leonard It worked and I finally got access to my account again. I'm so happy:D
Thanks so much, you really help me out :D
@Sawyer Reign No problem :)
Ты просто открытие, обязательно порекомендую твой канал в ld
Спасибо!)
Отлично объясняешь - у тебя, прям, талант! Это всё здорово в синтетическом примере, когда мы считаем задним умом. А по факту может быть кнопка с динамическим бекграундом и анимацией, и снова проблема - куда вставлять изменения (а там ещё принцип Single Responsibility). И иногда идея чистого наследования начинает проигрывать ad hoc. А иногда проще сделать отдельные сущности - так и связанность меньше, и зависимостей нет никаких.
Просто стоит помнить, что любой принцип может не подходить для текущей задачи. Иначе можно явно нарваться на Фабрику Фабрик и Fizzbuzz enterprise edition
Спасибо. Одно из самых понятных объяснений этого не простого принципа.
Очень интересное и подробное объяснение. Большое спасибо за проделанный труд!
оо, был такой опыт на проекте.
Буквально была кнопка и я как хороший программист, пытался учесть все возможные способы ее использования, от чего пропсы кнопки дико росли с каждой последующей версткой новых компонентов. А потом пришел лид и сказал "убери это нахер и делай отдельные компоненты таких кнопок". Я тогда послушался, но не понял смысла такого сокращения. В целом там это и было не так реализовано, как тут в видео и уже сейчас я ясно представил, как это все еще можно было упростить и улучшить. Но я только сейчас понял, как важно понимать все принципы.
Ну еще важно обьяснять почему надо делать, а не так. Если бы он мне сразу тогда донес свою мысль, то мне не пришлось бы узнавать случайно прямо сейчас.
действительно многие не могут нормально рассказать почему лучше делать так. Более того я когда то спрашивал у лида "а почему так?", на что мне отвечали, "я чувствую так лучше". По факту их опыт им подсказывал, что так будет меньше проблем, но они не могли до конца осознать свой опыт и сформулировать это во внятную мысль, которой можно поделиться и убедить коллег, что так будет лучше
Поэтому, на этом канале я стараюсь не просто рассказывать, как это работает, а рассуждать как использовать можно тот или иной инструмент, и конечно аргументировать свои мысли, хотя они могут быть иногда и ошибочными)
@@it-sin9k зато Вас интересно слушать и подача материала все же необычная. потому и смотрю Ваши выпуски (и не только их конечно), когда необходимо на что-то отвлечься.
@@romanmed9035 Спасибо!
Спасибо за Ваши труды! Наверное самое для меня интересное в фронтенде- применять паттерны проектирования, принципы ООП
Контент мега полезный!
Не очень то и гибкий подход. Вы унаследовали DefaultIconButtonWithBadge от DefaultIconButton. Но что, если в будущем и у CallIconButton появится badge? Придется создавать еще один дочерний класс. На практике это все может перерасти в кучу параллельных иерархий с дублирующимся кодом. А в остальном видео - огонь, очень доходчиво объясняете.
А вот здесь хорошо! Даже отлично. Очень правильно было отойти от привязки к наследованию классов.
Здесь яркий пример создания под-типов без классов и без наследования.
Учу java, данное видео дало понять данный принцип, даже учитывая, что примеры из совсем другой области
отличное обьяснение!! Все круто, продолжай в том же стиле!
Спасибо! Лучшая благодарность для нашего канала, это поделиться этим видео с коллегами
Лучшее объяснение, ты крут!!! И для Ютубчика SOLID - principle of Barbara Liskov.
Отличное объяснение ! Апплодисменты !
Спасибо!)
звучит все так просто ) как слышу меняем дизайны всех кнопок - у меня глаз дергается )
ахах) нужна практика) как за рулем)
Присоединяюсь к предедущим комментам. Одно из простейщих обяснении, да еще и с анимашками )))
Спасибо!) мы очень стараемся) особенно сейчас тренируем разные визуальные плюшки, чтобы было смотреть приятнее)
Я как бэкендщик (будущий) смотрю этот видос, и меня аж трясёт (мем с пёсиком: мхм-мхм, кнопочка должна теперь выводить циферки)
Но видос полезный, ведь принцип работает одинаково и там, и там
Огромное спасибо за инфо. Помогает мне подобрать принцип сборки дизайн-системы в Figma
Спасибо. Подобный подход в построение UIKit обдумываю уже какое-то время.
мы рады быть полезными)
Спасибо большое!
Очень круто. Примеры приближенные к реальности. JS + верстка, а не тупо на JS принципы объяснены.
именно такую идею при создании видео я и пытался передать) я рад, что получилось)
Вероятно, самое лучше объяснениє, которое я слышал :)
Спасибо!
высокая похвала! спасибо!)
пример с наследованием кнопок идейно крут, но только для этого лучшего всего подойдет не наследование, а порождающие паттерны, например декоратор, а так же композиция
таким образом ты делаешь "декоратор" - компонент обертку, Button, который выступает просто оберткой и получает children, потом ты делаешь кучу иконок и все такое, потом делаешь компонент "декоратор" WithBadge - который добавляет обертку твоему children и устанавливает бейджик в правом верхнем углу, теперь ты можешь это комбинировать - делать композицию:
чем это лучше? завтра приходит дизайнер и говорит, что мне бы бейджик добавить для тэга, или аватарки пользователя, а ты просто берешь и оборачиваешь :)
Composition > Extends
Декоратор всегда побеждает у наследования :)
Наконец-то я понял. Спасибо ! Все понятно!
Всегда пожалуйста ;-) Приходите еще)
спасибо за прекрасную подачу
Привет. Круто! Отличное объяснение!
Привет) Спасибо за фидбек!
Спасибо за урок!
По этому и CSS это CSS (Cascading Style Sheets), на наследовании весь CSS, и до css in js или модулей нужно было писать так чтобы не конфликтовали и плюс расширялись. Спасибо за урок
The best!
Меня направили на этот канал на собеседовании. Вижу что не зря сходил на это собеседование))))
ничего себе)) а в каком городе нас так рекламируют?)
@@it-sin9k Одна компания в Черновцах)
круто!) расширяем нашу географию)
прям мега!!
Спасибо!
не за что)
Супер
супер классно, спасибо
Синяк, хороший у тебя канал.
Жалько что не много подписчиков. Продолжай и скоро будешь мега популярным.
Спасибо за труды
Спасибо!)
мы просто не продвигаем канал на финансовой основе) возможно были бы совсем другие результаты) поэтому можете поделиться полезными видео с коллегами) мы будем очень благодарны)
@@it-sin9k Очень хочется поделиться с коллегами, но к моему сожалению они не знают русского языка.
мы начинали английскую версию, там даже приличное кол-во видео запаблишено)
но из-за недостаточного английского и свободного времени, пришлось поставить на паузу, пока бюджет на это дело не появится) Пока вот пару видео можете пошарить коллегам)
ruclips.net/video/CICzqtQhL7U/видео.html
@@it-sin9k Спасибо! Круто что про Reconciliation есть на английском. Будем объяснять почему key важно делать уникальным. И вообще что там под капотом 👍🏻
будем стараться по быстрее воскресить английскую версию)))
но пока сил на нее нехватает)
крутой видос,спс !
Композиция компонентов или render props были бы даже лучшим вариантом, чем DefaultIconButtonWithBadge. Тут видится вообще 3 компонента: кнопка, внутренняя иконка и бэдж
Ага) разгонять можно сильно) в зависимости от нужд проекта)
Год не работал, смотрю перед серией собесов. Если поможет, подпишусь на донаты. Ну а пока лукас + коммент.
Перед собесами, лучше посмотреть тогда про React плейлист и доклад про React)
Ждем и надеемся на донаты :D
Очень интересно) Для добавления budge лучше сделать без создания новой кнопки, в просто добавлять кнопку в качестве children при использовании budge компонента?
в данной ситуации наверное да)
Thanks!
Первое супер спасибо! Низкий поклон!!!
Спасибо, полезно
Спасибо за видео! Вечно забываю смысл этого принципа из-за не очень говорящего названия) Получается, если следовать этому принципу, то базовая уточка не должна уметь летать? Или механической утки не должно существовать?
Оба варианта работают. Если базовая утка перестанет уметь летать, то принцип не будет нарушаться. Либо механическая утка не будет наследоваться от базовой утки.
Мне кажется, нам тяжело его запомнить, т.к. мы его не используем во фронтенде. Это на первый взгляд кажется вообще невозможным :)
Очередной годный контент! Очередной лайк Синяку! А ты реально пишешь на голом is, не на typescript даже?
Как какой проект, текущий на TS, предыдущие 2 были на JS.
А чем эта эпопея с кнопками отличается от обычного наследования?
Не совсем понял как размеры прокидываются, через IconButton или отдельно CallIconButton и отдельно defaultIconButton?
описание идеи вроде ясно, но с реализацией остались вопросыю ведь помимо чисто стилевых изменений у наследников появляются и логические изменения, и даже разметка меняется.
Да и такое дерево наследия, всё таки выглядит в реальных проектах более монструозно, и противоречит некоторым рекомендациям избегать наследования в пользу композиции.
На самом деле, то что обсуждается в этом видео, это скорее ближе к композиции чем к наследованию. Есть еще одно видео, в котором я использовал похожий подход, чтобы разложить попапы по полочкам)
ruclips.net/video/20ZVV5ujkFw/видео.html
получается что практически создано несколько кнопок которые чисто теоретически наследуются от базовой. к тому же код наследования не показан, что в итоге предполагает что просто изменены стили. ибо реальное наследование тут не имеет смысла. хотя радость в одном- проверка не нужна, поскольку кнопки по сути созданы заново и отдельно. так в чем тогда смысл? и без кода для тех кто еще не делал наследование все это слова с картинками. ведь тут и новички смотрят, для которых возможно само понятие наследование уже не так просто. в итоге для них все это осталось не более чем картинка с утками и кнопками без понимания что же произошло в реальности. когда я первый раз делал наследование элемента, то хотя и прошло много времени, но помню как же все это было странно и непонятно. и только после того как этот инпут запустил, понял весь механизм. поэтому было бы неплохо добавить хотя бы код любым образом или даже выпустить более подробное видео с тем же наследованием элементов, если такового еще не имеется.
Спасибо за подробный комментарий :)
Мы изначально решили делать контент направленный не на новичков, потому что для них материалов в интернете огромное количество. Идея видео была, скорее показать, как этот паттерн будет выглядеть в рамках фронтенда
@@it-sin9k спасибо, да заметно что все же не для нулевого уровня и это радует. ибо как устновить ноду и кра несколько десятков вариантов.
Так как реакт продвигает композицию вместо наследования, то это все у нас будут просто разные компоненты, так ведь? (Возможно только с общим файлом стилей, но разными .tsx файлами🤔)
Да, конечно это разные tsx файлы. Более подробно я разбирал как это может выглядеть на примере попапов в этом видео. Идея примерно такая же:
ruclips.net/video/20ZVV5ujkFw/видео.html
подскажи пжл, я не совсем понял как создавать прототип функционального компонента, чтобы основываться на его текущей реализации и добавлять еще новую.У меня есть только идея делать это через HOC
Я обычно действую очень ситуативно. Например, если те же кнопки выглядят совершенно по разному, я бы разнес это просто в разные компоненты. Если же мы хотим просто добавить существующей кнопке, например состояние isActive (у самой кнопки физически такого состояния нет). Я возможно создал бы еще один компонент, который в return будет возвращать первоначальную кнопку и передал бы className ему что то типа такого classNames({ [styles.active]: isActive }). Таким образом кому нужна кнопка с активным состояние использовал бы эту кнопку, а кому состояние такое не нужно использовал бы базовую кнопку
@@it-sin9k неплохой вариант, спасибо за совет мистер Синяк)
у меня такой вопрос,
допустим у нас есть базовая кнопка: IconButton со своими стилями из ../UiKit/IconButton/style.css
затем у нас появилась необходимость в новой кнопке: CallIconButton, и для этого мы создаем еще компонент CallIconButton куда подключаем стили из ../UiKit/CallIconButton/style.css, то есть каждый раз при необходимости мы создаем новый компонент с новыми стилями?
я правильно понял?
Смотря в какой ситуации. Если вы хотите расширить функционал текущей кнопки, то создаете новую и дописываете ей нужные стили только.
Есть еще один пример с попапами, где я делал по такому же принципу, может станет немного понятнее:
ruclips.net/video/20ZVV5ujkFw/видео.html
А как быть с изменениями в базовый компонент IconButton?
Стараться не вносить изменения, а расширять его (знакомый принцип)?
Ведь иначе придется проверять всех остальных потомков.
Возможно тут будет полезно скриншот-тестирование.
Сорри, если я пропустил ответ в видео)
идея таких подходов заключается в том, что чем ближе компонент к базовому, тем реже он должен изменяться. Если так не получается, вероятно либо у вас короткое дерево насследования, либо составлено не совсем удачно наследование.
И конечно же скриншотное тестирование избавит вас от пробрем с регрессией. Однозначно рекомендую
Как быть с функциональными компонентами?
Выносить логику в кастомные хуки? и дергать их у наследников?)
конкретно в данном кейсе, я рассматривал ui-kit. У ui-kit вроде как не должно быть логики
👋👋👋👋
Доброй ночи, можете объяснить что значит наследовать от базовой кнопки?
Не могу понять как это происходит на практике.
За ранее благодарю.
тут не столько был рассказ о насследовании, которое стоит использовать в повседневном проекте, сколько скорее рассказать про то как работает этот принцип. В данном случае "псевдо" наследование заключалось, что мы просто использовали кнопку как обычный компонент и добавляли какие-то дополнительные настройки
@@it-sin9k понял Вас, спасибо большое за ответ и за видео которые Вы делаете
не совсем понятно как расширять базовую кнопку
Создаём обычную кнопку с минимальным набором стилей и пропсов, для расширения оставляем две вещи: динамический класс и контент кнопки как children, для кнопки с иконкой мы прокидываем иконку в children, и если нужно красить то прокидываем модифицирующий класс
Да и где поддержать можно )?
мы пока еще не рассматривали варианты для пожертвований)
но для нас особое значение имеет то, что наш контент вызывает желание поддержать проект!)
Это вероятно лучшая похвала)
Спасибо!)
Если будете выбирать посмотрите buymeacoffee) а то у patreon большие проценты) Рубрика незваные советы ;)
Спасибо за совет) о таком не знал даже) будем изучать вопрос)
Привет) мы прислушались к твоему вопросу и создали целых 2 площадки для поддержки проекта, возможно разным людям в разных местах удобнее поддерживать) Если еще есть советы по тому как мы оформили или выставили настройки дай знать)
Поддержать проект можно здесь:
Patreon: www.patreon.com/ITSin9k
BuyMeACoffee: www.buymeacoffee.com/XcBPY5W
Механическая утка должна наследовать миксином от утки и какого либо механизма, лучше через интерфейсы, поведение частично берётся от утки, частично от механизма… а просто наследование от утки некорректно, именно поэтому лис и нарушается
Но ведь изначально не использовалось вообще никакого наследования. Т.е принцип не нарушался - его просто негде было применить. Потом автор внедрил наследование сразу с применением LSP. По-моему не очень показательно.
ps: а вот пример с утками зачётный
механическая? я думал это утка зомбарь
ахаха) я как раз смотрел в те времена "живые мертвецы" или как он там называется))
Да неужели хоть кто-то нормально объяснил!
По-моему принцип подстановки Барбары Лисков тут притянут за уши. Я его понимаю как наследуемый класс не должен расширять интерфейс, а только менять поведение базового интерфейса, чтобы можно было указывать в аргументах базовый класс или интерфейс. В приведённом примере и близко нет такого требования, везде используется конкретная имплементация. В итоге получили несколько параллельных иерархий: обычные иконки, иконки с бэджами и иконки для звонков -- а дальше все остальные комбинации. Это очень плохое решение, сам обжигался на нём несколько раз. Лучше иметь иерархию новых признаков, чем несколько иерархий с признаками (см. паттерн мост).
Хмм, я вот перечитал несколько раз. Возможно я ошибался в понимании этого принципа. Попробую на свежую голову почитать побольше :) Спасибо за комментарий!
Я, конечно, не претендую на истину в последней инстанции, но возьму на себя смелость высказать конструктивную критику.
Во-первых, краткая формулировка принципа подстановки от Роберта Мартина на человеческом языке - "функции, использующие базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом".
Во-вторых, этот принцип описывает правильный полиморфизм, а не правильное наследование.
В-третьих, лично я вообще против этого принципа, так как он ломает напрочь саму основу ООП. И я не могу придумать ситуацию, когда может понадобится внезапно подставлять подкласс туда, где изначально был родительский класс. Если вам внезапно в объекте родительского класса понадобился метод одного из его наследников, значит у вас что-то не так с архитектурой приложения.
В-четвёртых, проблема с появлением кнопки с количеством пользователей решалась добавлением 2 свойств, которые нужно было предусмотреть ещё на этапе добавления свойства theme, а именно добавить свойство css_class вместо theme и content вместо badge, а в них уже в виде объектов хранить и тему и тип контента (bagde/numbers/emoji) и сам контент.
В-пятых, на кнопках звонка badge тоже нужен. Как ты дашь понять пользователю, что его микрофон выключен или за(mute)н или камера не определяется или поставлена на паузу?
В-шестых, в качестве цветовой темы правильнее и логичнее использовать переменные css, а не свойства в коде js.
В-седьмых, обнуление css-свойств для класса - это, конечно, ни разу не нарушает принцип reuse, да... размещение шрифтовой иконки в виде тега вместо псевдоэлемента before с абсолютным позиционированием - это, конечно, сильно... Но спишем это всё на демонстрационный пример.
Дальше я уже окончательно перестал понимать, что происходит на экране и кто все эти Button. Резюмирую.
Мне больно смотреть, как люди надрачивают на одну из букв твердотельника с сомнительной полезностью, при этом просирая наглухо принципы DRY, разделения ответственности между представлением и логикой, здравого смысла и юзабельности собственного инструмента.
Просто прочитай 2 принцип солид. и все
isDisabled?! ты че серьезно?
Объяснение не корректное, по сути вы привели пример наследования. ЛСП говорит о нарушении контракта.
Автор явно не читал 2 принцип солид
Двоешник, или учись. Этот принцип про типы,а не про наследование классов