Ключевые фишки Vue 3 - обзор приятных новшеств

Поделиться
HTML-код
  • Опубликовано: 7 окт 2020
  • Реактивность с Proxy. Fragments, Teleport, обновлённый v-model, немного Composition Api. Подробный базовый курс - js.dmitrylavrik.ru/vue/

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

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

    Дмитрий спасибо за твои материалы , смотреть ролики одно удовольствие, хорошая подача, приятный голос

  • @MultiVINTAG
    @MultiVINTAG 3 года назад +4

    Дмитрий спасибо за вашу подачу, благодаря вам я нашел работу мечты!

  • @eugenegavrilov2618
    @eugenegavrilov2618 3 года назад +1

    Спасибо, самое непредвзятое видео, что я встречал. Показаны плюсы минусы и каждый уже может для себя решить, надо оно ему или нет.

  • @MetaDriver33
    @MetaDriver33 3 года назад +31

    Привет, Дмитрий. Композишн апи был бы не так интересен, если бы дело ограничивалось семантической группировкой сущностей. Но самая вкусняшка в том, что сгруппированные "по смыслу" сущности, можно оборачивать в функции (возвращающие их), и выносить эти группирующие функции в библиотеки. И затем самые различные компоненты, могут эти вынесенные функции дёргать в своих setup'ах и с лёгкостью встраивать в себя готовые куски фунционала.
    На первый взгляд это похоже ...эээ... на миксины. Таки, да. Но есть небольшие, но крайне существенные различия. Во первых, в отличии от миксинов, эти [библиотечные] функции могут иметь параметры, и возращать "динамически изготовленное" (зависящее от фактических параметров) содержимое. Во вторых, их можно дёргать неоднократно, в пределах одной setup-функции (с различными или одинаковыми параметрами), чтобы создавать необходимое для компонента количество соответствующих функциональных блоков. В третьих, фактические параметры, при вызове могут быть зависимы от пропсов - миксины такого уж точно не умеют.
    Ну ок. А что же с реактивностью функциональных блоков, возвращаемых этими функциями ? А всё чики-пуки там с реактивностью ! Ибо третий вуй предоставляет апи реактивности, которое позволяет делать реактивными любые JS-переменные, даже если они не в однофайловых вуйских компонетах создаются. Любую библиотечную переменную можно сделать реактивной, если импортировать в либу соответсвующую "реактивизирующую" функцию вуя (например ref()), и завернуть в неё соответствующую переменную.
    Ну и напоследок. Вообще-то в тройке не обязательно при создании компонента делать выбор между Options API и Composition Api. Дело в том, что любой компонет может использовать ОБА апи одновременно, абсолютно без вреда для здоровья. В этом случае синаксически компонент будет написан "в стиле" Options API, а функция setup будет в нём как бы дополнительных хуком жизненного цикла. "Как бы" - потому, что есть таки некоторые тонкости, которые лучше изучить по документации, ибо место для комментариев на ютубе ограничено...
    --
    P.S. И таки да, Дмитрий - успехов в борьбе в С.Ю.Шиповым )

    • @nikdanik
      @nikdanik 3 года назад +4

      Напиши статью на хабре про все эти фишки нового вью развернуто, с удовольствием бы почитал

    • @jgkdmdevienjjgg8866
      @jgkdmdevienjjgg8866 3 года назад

      Да, composition api для сложных компонентов хорошо подходит (намного проще переиспользовать код в сравнении с миксинами/наследованием + меньше проблем с реактивностью), для простых случаев вполне можно оставить options или class api - т.к. они более читабельные для простых кейсов.

    • @Nikitosss91
      @Nikitosss91 Год назад

      Дима катает в шахматы против СЮ ?

  • @AlpinWeb
    @AlpinWeb 3 года назад

    Мне понравился новый подход, он открывает новые архитектурные возможности, и позволяет удобнее работать с большими компонентами.

  • @denis_hromov
    @denis_hromov 8 месяцев назад

    Спасибо, полезно. Даже через 3 года )

  • @webxcryptoit7308
    @webxcryptoit7308 3 года назад

    Дмитрий, спасибо! Красавчик!

  • @arthurdavinskiy8357
    @arthurdavinskiy8357 3 года назад

    ставлю лайк, позже посмотрю. спасибо за видос!)

  • @Sergey-jq5kz
    @Sergey-jq5kz 3 года назад +1

    телепорт реально крутая штука, реально не хватало

  • @BraentR
    @BraentR 3 года назад

    Спасибо

  • @user-gr6dw9jd1c
    @user-gr6dw9jd1c 3 года назад

    ООП - ответ на вопрос

  • @andrufka46rus
    @andrufka46rus 3 года назад +1

    на 48 минуте чтобы не писать .value можно же было в return обернуть объект в markRaw

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

    Даёшь Vue 3 + TS
    Я неделю убил пока c Vuex + TS разобрался. Думаю полезный контент будет. В русскоязычном сегменте ничего не нашёл такого.

  • @yura3d3d
    @yura3d3d 3 года назад +1

    Забавно, но у слайдера Swiper сейчас, всего через 2 месяца после выхода этого видео, в списке поддерживаемых версий Vue только тройка

  • @alexwill7818
    @alexwill7818 3 года назад

    Все таки композишн апи на любителя, а если взять тайпскрипт то можно вообще класс стайл компонент сделать и группировать как хочешь и выглядит приятно

  • @volodgo
    @volodgo 3 года назад +1

    Немного не затронули в варианте , случай, если мы используем props
    Нужно будет использовать, вот такую конструкцию, например:
    export default {
    props: {
    name: String
    }
    }
    let catName = computed(() => props.name.replace(/[_.-]/gi, ' '))
    export {
    catName
    }
    Источник: github.com/vuejs/rfcs/blob/sfc-improvements/active-rfcs/0000-sfc-script-setup.md#using-setup-arguments

  • @user-iy6ng5sg4z
    @user-iy6ng5sg4z 3 года назад

    Дмитрий, теперь, когда завезли нормальную реактивность, хорошо ли будет для мелких и средних проектов хранить глобальный state приложения в $root компоненте? или тут возникнут какие-то подводные камни? (про то что отслеживания состояний как во vuex не будет - понятно, будут ли другие минусы)

  • @k.safonov
    @k.safonov 2 года назад

    Никто не разбивает компоненты, если в них 100-200 строк. Вот 600+ строк - это да. И то не всегда их стоить бить на более мелкие части. (я имею в виду компоненты, внутри которых не только логика и разметка, но и CSS).

  • @ruslanmelnychenko3929
    @ruslanmelnychenko3929 3 года назад

    А вот если использовать setup, и мы говорим про группировке логики, что делать есть переменные взаимосвязаны в разных частях, получается переменные придется объявлять сверху а логику групками писать ниже?

  • @jgkdmdevienjjgg8866
    @jgkdmdevienjjgg8866 3 года назад +1

    на 2 vue есть плагин для фрагментов. проблем с ним не было

  • @user-hq3ri7ui7l
    @user-hq3ri7ui7l 3 года назад

    Дима, здравствуйте!
    есть вопрос по Вью, есть компонент, самый обычный, в нем есть data, есть methods;
    я попробовал переместить содержимое methods в data, было три метода, стало ноль, а дейта стала на три поля жирнее.
    И всё работает, никаких видимых изменений не видно. Но что будет, когда приложение станет больше, как это отразится на скорости?
    Очень надеюсь на твой профессиональный комментарий)

  • @TheProfessionalGambler
    @TheProfessionalGambler 3 года назад

    Сделай видео на тему MobX vs Redux Toolkit, кто победит?

  • @jgkdmdevienjjgg8866
    @jgkdmdevienjjgg8866 3 года назад +1

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

    • @MetaDriver33
      @MetaDriver33 3 года назад

      JSX в рендер-функциях по прежнему доступен. И вполне можно выносить фрагменты шаблона в переиспользуемые методы, и накапливать их, например, в глобальной либе, а дёргать в рендер-функциях компонентов.

    • @jgkdmdevienjjgg8866
      @jgkdmdevienjjgg8866 3 года назад +1

      @@MetaDriver33 хочется без него. к тому же его нельзя смешивать с темплейтами в рамках одного компонента

    • @mikech76
      @mikech76 3 года назад

      переиспользуемый кусок верстки называется ... (дочерний) Компонет? )

  • @user-kf7xl2gh1q
    @user-kf7xl2gh1q 3 года назад

    курс по Nuxt был бы неплох)

    • @kurlovichdv
      @kurlovichdv 3 года назад

      Выкинте nuxt на помойку и забудьте как страшный сон. Используйте quasar

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

    - хочешь присоединиться к моей религии?
    - что за религия ?
    - Лавриканство - Лаврик, как никто другой просвещает по всем темам современной веб разработки
    - я заинтересован! А что надо делать?
    - ставить в чат плюсики

  • @ktotut5378
    @ktotut5378 3 года назад +1

    Досмотрел ролик до 55-й минуты и понял главное - надо дальше изучать React.))) Такое ощущение, что во Vue одна половина сообщества пытается ставить эксперименты над второй. Не знаю, задавал ли кто-то такой вопрос раньше, но он жизненный (я с ним столкнулся после начала работы с Laravel). Как получить опыт коммерческой разработки? Вот закончил ты курсы, весь такой умный, красивый, но с нулевым портфолио никому не нужен.) А без коммерческой разработки знания бесполезны.

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

      Досмотрел ролик до 55-й минуты и понял главное - React больше не нужен)))

    • @SuperPuperClimp
      @SuperPuperClimp 3 года назад +1

      И где брать этот коммерческий опыт, если все ищут спеца с опытом?))

    • @alexanderverbitsky280
      @alexanderverbitsky280 3 года назад

      Наблюдал за историей развития Vue. В 1.х версии - шаблоны аля ангуляр, миксины из реакта (которые уже deprecated в реакте); 2.х - скопировали render функции из реакта. 3.х - скопировали хуки из реакта + пытаются присобачить синтаксис из svelte (script setup и ref) - получается вообще какой-то диалект js. Смотришь на все это и офигеваешь. Реакт реально проще для понимания. Ну и не типизированные шаблоны - это 5+.

    • @m0rtis-nwo
      @m0rtis-nwo 3 года назад +1

      У меня было так: один клиент, с которым я уже работал, обратился за веб-приложением для агрегатора предложений по организации торжественных мероприятий. Цена была крайне небольшая, если сравнивать ее с ТЗ. Я согласился, но с одним условием - стэк выбираю я сам. А мне как хотелось изучить vue и его экосистему, его я и выбрал. В итоге я учил его как раз в ходе разработки коммерческого проекта, который и в портфолию добавить не грех:)

    • @ktotut5378
      @ktotut5378 3 года назад

      @@m0rtis-nwo, ну, я так и работаю.)

  • @vitiok78
    @vitiok78 3 года назад

    Поменяли this на .value ))
    Шило на мыло... Интересно, есть ли какие-то другие подводные киллер-фичи composition API, которые бы заставили меня отказаться от кода на options API, на который даже смотреть приятней

    • @MetaDriver33
      @MetaDriver33 3 года назад +3

      А не надо отказываться. ОБА апи можно использовать в одном компоненте ОДНОВРЕМЕННО. Я например, так и собираюсь жить. В ролике не раскрыта важная composition-фича - возможность выносить фрагменты сходного функционала в глобальные либы, которые можно затем встраивать в компоненты посредством композиции в функциях setup. См. мой комментарий чуть выше, там немного подробнее.

    • @vitiok78
      @vitiok78 3 года назад

      @@MetaDriver33 Вот это уже другое дело. Миксины мне не особо нравятся

  • @jmmmas
    @jmmmas 3 года назад

    Зачем учить Vue, если есть Ангуляр и Реакт? :D
    Зачем нужно было ждать 2020, чтобы начать работать с порталами?
    С типизацией в верстке как дела?

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

      Зачем учить Англуяр и Рякт, когда есть Vue, который в разы быстрее учится и проще в использование чем первые два?

    • @jmmmas
      @jmmmas 3 года назад +1

      @@SlavaCh Да это понятно, но правда ли это? Реакт, хуки и create react app сделали вход совсем простым. Но это холиварный вопрос, согласен. Не будем его трогать. Хотел все таки узнать как с типизацией в шаблонах? Она есть или нет?

    • @SlavaCh
      @SlavaCh 3 года назад

      @@jmmmas Vue3 адаптирован к работе с TS, отсюда следует, что типизация на месте. Или под «типизацией в шаблонах» что-то иное подразумевается?

    • @jmmmas
      @jmmmas 3 года назад

      @@SlavaCh судя по тому, что шаблоны vue - это строки, то типизация в строках отсутствует. Возможно это как то решили, интересно как?

  • @ruslanmelnychenko3929
    @ruslanmelnychenko3929 3 года назад

    Как обращаться к $refs в setup?

    • @andriiyurchuk3299
      @andriiyurchuk3299 2 года назад

      const названиеРефа = ref(null);
      Это создаст template ref, тот самый. Просто во vue 3 это теперь одно и то же