Vue 3 (Composition API) и TypeScript - Фундаментальный курс 2023

Поділитися
Вставка
  • Опубліковано 31 тра 2023
  • В этом видео создадим игру "Виселица" на Vue 3 (Composition API) и Typescript. Разберем все тонкости типизации Vue приложения.
    Верстка (папка layout) и финальный код можно скачать по ссылке:
    github.com/pavellbor/hangman-...
  • Наука та технологія

КОМЕНТАРІ • 73

  • @nasipsalmakhunov4375
    @nasipsalmakhunov4375 Рік тому +9

    Круто, спасибо! Жду еще проектов Vue 3 (Composition API) и TypeScript :D

  • @tuku_mann
    @tuku_mann Рік тому

    Супер! Спасибо за интересный контент)

  • @aweb_21
    @aweb_21 Рік тому +1

    Вот это интересно! Благодарочка, лайк и подписка!
    Ждем больше контента composition api+ts

  • @user-mr8hj9qj8u
    @user-mr8hj9qj8u Рік тому

    Спасибо! Очень полезное видео!

  • @Vladislav1449
    @Vladislav1449 10 місяців тому

    Спасибо большое за такой контент (vue+ts). Очень не хватает видео на данную связку. Жду новых видео!

  • @alexeymatveev9031
    @alexeymatveev9031 Місяць тому

    Это просто вау. Спасибо огромное. Буду ждать других видео.

  • @djbeatlike
    @djbeatlike 7 місяців тому

    Отличный ролик и пример для объяснения. За час базу подтянул, спасибо!

  • @fuad2069
    @fuad2069 Рік тому +2

    Очень крутой канал, огромное вам спасибо) Желаю удачи с развитием канала!!!

  • @Chudikfilosof
    @Chudikfilosof Рік тому +6

    Очень интересно было делать такой проект. Спасибо за комментарии которые даешь дополнительно, объясняя как работает TS и в принципе логику происходящего, а то мне как новичку пока сложно за всем уследить кто за что отвечает. Очень приятно что не остановился на готовом работающем коде, а показал как можно рефакторить его - это оооочень ценно! То что, как ты сказал "тупил" - в этом есть особая прелесть - показываешь что ты это делаешь в режиме реального времени и ты реальный человек который рассуждает. Павел - ты супер! 🔥

  • @kudkuda9376
    @kudkuda9376 Рік тому

    Круто! Спасибо

  • @ValiantsinYushkevich
    @ValiantsinYushkevich Рік тому +20

    Пара замечаний по ролику
    1. ключ для элементов списка не надо использовать индекс, это прокатывает но это порочная практика для крупных списков или компонентов где несколько динамических списков. Приемлемым тут было формировать ключ по комбинации символ + индекс
    2. проверку символа к регулярке надо выносить в отдельную функцию и вызывать внутри проверки условия if, иначе для каждого раза проверки она пересоздается и сборщик мусора вынужден убивать созданную для прошлой проверки функцию. После рефакторинга применил более удачное решение.
    3. вычисления внутри шаблона делать не желательно, применять тернарники в том числе, если шаблон будет перерисовываться по любым основаниям все эти вычисления будут пересчитаны, это не производительно, поэтому всем им место в компьюетед свойствах
    4. при импортах компонентов лучше использовать абсолютные пути, начинающиеся с @
    5. Выносить функционал как показал автор надо только в 2 случаях, если он используется в разных местах приложения, или размер компонента перевалил за золотой стандарт 300 строк, выносить абы выносить не надо. Достаточно сгрупировать по принципу выполняемой функциональности. Иначе снижается читаемость, приходится проваливаться в use импорты чтобы понять что они делают и соответственно что делает компонент с их участием.
    За применение тайпскрипта автору респект

    • @tatianovnafrutti8982
      @tatianovnafrutti8982 9 місяців тому +5

      А могли бы дать ссылку на гит или любой другой источник(куда бы Вы могли залить), отрефакториного кода? Если Вас не затруднит, я просто учусь и для меня такие вещи: как делать правильно и лучше и вот все такое - прям очень важно и интересно, очень бы помогли ).

    • @user-rr1ju1ck2u
      @user-rr1ju1ck2u 7 місяців тому +1

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

    • @ValiantsinYushkevich
      @ValiantsinYushkevich 7 місяців тому

      @@tatianovnafrutti8982 привет, напиши электронную почту свою или телегу

  • @Ctrl_C.Ctrl_V
    @Ctrl_C.Ctrl_V 10 місяців тому

    Спасибо, очень информативное видео! Не останавливайся, у тебя круто получается !)

  • @user-ni6dd4bh9u
    @user-ni6dd4bh9u Рік тому +5

    Сначала несколько напрягал измененный голос - ну не серьезно как-то! :) Но содержимое все перевешивает! Я прям крайне удивлен. Наконец кто-то смог вырваться из проклятья TODO-листа и сделать что-то нормальное, и креативное! Ну сложность порадовала - не совсем для детского сада. В дальнейшем хотелось бы увидеть постепенное возрастание сложности примеров, пусть это и будет растягиваться на несколько таких видео. А то в русскоязычном сегменте на composition прям совсем голяк.

  • @maxsolo6446
    @maxsolo6446 8 місяців тому

    Шикарная практика! Прошёл на одном дыхании! Не заметил, как время пролетело. В одном видео база, которые многие умудряются растягивать на 20 часов. Топ!

  • @user-gy7vx8zm3h
    @user-gy7vx8zm3h 8 місяців тому

    Спасибо большое за практику. Очень помогла 🔥🔥🔥
    У кого в конце видео появилась проблема с повторяющимися буквами в ошибках, добавьте return после showNotification():
    window.addEventListener('keydown', ({ key }) => {
    if( isWin.value || isLose.value ) {
    return
    }
    if(letters.value.includes(key)){
    showNotification()
    return
    }

  • @user-sl6zf3te7t
    @user-sl6zf3te7t 11 місяців тому

    Thank you very much!

  • @johnloye4465
    @johnloye4465 Рік тому

    спасибо бро круто)

  • @ya_aan
    @ya_aan 11 місяців тому +3

    Ждем видео со скрипт setup и подробное объяснение всех действий) И вместо маковых данных предлагаю создать фейковую БД, либо взять какую нибудь апишку

  • @user-hk8em2re8r
    @user-hk8em2re8r Рік тому +1

    Отличный видос, бро! Давай еще что нить запилим на Vue 3 Composition API и TypeScript))

  • @ural-site
    @ural-site 2 місяці тому

    Урок бомбический, покройте это код тестами или может есть уже уроки про тесты?

  • @sergeyf4256
    @sergeyf4256 Рік тому +2

    Очень крутой контент, подписался. Смог сделать тестовое на vue, хотя не разу его в глаза не видел, но работал на реакте и ангуляре. Не бросай делать ролики, очень хорошо объясняешь.
    Ps немного напрягает мультяшный голос но со временем привык)

  • @mysoul1632
    @mysoul1632 Рік тому +2

    Топовый курс, продолжай в том же духе, курсы такого уровня на vue еще не встречал, буду следить за новыми видосами, хотелось бы побольше про vue + composition API + Ts, было бы прикольно посмотреть какой нибудь проект в лайв режиме

    • @mysoul1632
      @mysoul1632 Рік тому +1

      Или вообще про архитектуру приложений на Vue

    • @mysoul1632
      @mysoul1632 Рік тому +1

      Было бы также интересно посмотреть урок про VueX + TypeScript

    • @user-zu3ld8is4y
      @user-zu3ld8is4y 11 місяців тому

      @@mysoul1632 new

  • @user-rr1ju1ck2u
    @user-rr1ju1ck2u 7 місяців тому +1

    давай ещё че нить. по Nuxt, к примеру

  • @mgfck
    @mgfck  Рік тому +3

    Верстка лежит здесь (папка layout)
    github.com/pavellbor/hangman-vue-ts

  • @Chudikfilosof
    @Chudikfilosof Рік тому +2

    В самом конце видео после рефакторинга уведомления о повторном символе, в App.vue, после showNotification() нужен return. А то без этого повторные символы всё равно можно будет вводить

  • @aktotuttttt
    @aktotuttttt 6 місяців тому

    спасибо за видео
    жду еще крутых работ давно небыло
    подскажи если возможно как ты задеплоил на версел? у меня закрашилось при деплое (((

  • @tatianovnafrutti8982
    @tatianovnafrutti8982 9 місяців тому +1

    Крутой контент спасибо! Изменение голоса правда все портит но всеж.. ) А еще вопрос такой: зачем в ref брать переменную обычную? ту же "василий", почему просто нельзя её задать без реф? и вот такие моменты.. Мне казалось рефы только для ДОМ элементов...

  • @user-mx6vz6rq6z
    @user-mx6vz6rq6z 10 місяців тому +1

    Классно все, понятно, но голос не очень, сбивает с толку немного

  • @redsm0ke19
    @redsm0ke19 Рік тому

    Спасибо за видео, все круто и понятно. А какой шрифт вы используете в редакторе кода ?

    • @mgfck
      @mgfck  Рік тому +1

      Привет! Тема встроенная: Dark Modern. Шрифт по умолчанию.

  • @protonys
    @protonys 11 місяців тому

    Классно, а чем модулировали голос? :) "Введу букву АШ (ш)" - это круто

  • @user-mo1gm8hv7l
    @user-mo1gm8hv7l 10 місяців тому

    делаю с вами, но везде краснота. подчеркивает даже import {ref} from 'vue' (Cannot find module 'vue'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option)

  • @romanmed9035
    @romanmed9035 Місяць тому

    жаль что при таком голосе на полуторной скорости не посмотреть. и вопрос к автору. а вот подобное но не с vue файлами, а если js и в них старым способом писать активную часть а шаблон в html файлах в теге скрипт?

  • @user-rz7xz4wf8p
    @user-rz7xz4wf8p 10 місяців тому +1

    Давайте похоливарим. А насколько это правильно управлять методами дочернего компонента извне? Я, конечно, тоже так делал пару раз, но мне лично кажется, что этого стоит избегать при возможности. Что думаете?

  • @user-pz6zo2ff7p
    @user-pz6zo2ff7p 9 місяців тому

    Вместо index === [...].length - 1, можно использовать index === [...].lastIndex

  • @BuddaKun
    @BuddaKun 6 днів тому

    Я не специалист, но разве не через emits прокидывать надо? Разве родитель должен иметь доступ к дочерним элементам?

  • @virtuoz-ru
    @virtuoz-ru Рік тому

    Благодарю. Подписался.

  • @user-jr8mf5bc7x
    @user-jr8mf5bc7x 2 місяці тому

    а баг с тем, что ТС ругается, вернулся в конце видео) не вылечили)

  • @user-mr8hj9qj8u
    @user-mr8hj9qj8u Рік тому +2

    Было бы круто увиделть материал по вебсокетам на накст 3 с обьяснениями
    На русскоязычном пространстве ютуба днём с огнём не сыщешь такого материала
    Заранее спасибо!

    • @ValiantsinYushkevich
      @ValiantsinYushkevich Рік тому

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

  • @YellowPanamka
    @YellowPanamka Рік тому

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

    • @mgfck
      @mgfck  Рік тому +1

      3 года (1 год на Vue)

    • @boycovclub
      @boycovclub 9 місяців тому

      @@mgfck вы молодец) код хорош) (о себе 3 года на nuxt 2). На composition свои приложения пишу схожим образом

  • @user-vf7pc4tn9z
    @user-vf7pc4tn9z Рік тому +1

    покажешь как архитектуру больших приложений делать мультиязычность мульти селекты и мульти формы а также авторизация и роли пермишены?

    • @ValiantsinYushkevich
      @ValiantsinYushkevich Рік тому +1

      Мультиязычность i18n, мультиселекты не понятный вопрос, мультиформы на вью делаются изи, несколько компонентов внутри формы показываем каждый из них в зависимости от текущего шага, сама форма помнит все состояние. Авторизация , при загрузке приложения проверил если пользователь не авторизован перенаправил на логин, авторизация стандратно запросами на сервер и получением токена. Роли делаются на вью гвардах, самый популярный beforeEach перед переходом на страницу чекает допуски пользователя и мета инфу роута куда собрались ломится если совпадают пропускает переход если не редирект.

    • @tatianovnafrutti8982
      @tatianovnafrutti8982 9 місяців тому

      @@ValiantsinYushkevich Спасибо! Круто

  • @residenttwitch1234
    @residenttwitch1234 Рік тому

    А VueX будет ?

  • @user-mo1gm8hv7l
    @user-mo1gm8hv7l 10 місяців тому

    по какой - то причине не вводится 1 буква, интересно почему?

  • @phat80
    @phat80 11 місяців тому

    Интересно было бы узнать, почему Vue так и не одолел React по популярности. Помню одно время ему пророчили первое место во фронте. Даже говорили, что с выходом 3й версии он порвет React. Но воз и ныне там. Даже относительно новые библиотеки, типа Svelte, отвоевывают свою долю. А Vue, такое впечатление, только сдает позиции. В чем проблема?

  • @vipdeveloper
    @vipdeveloper 2 місяці тому

    Как ты сделал такой голос?

  • @KimarTV
    @KimarTV Рік тому

    Вот такая ошибка
    error 'defineProps' is not defined
    Почему у вас без import {defineProps} from "vue"; всё работает?

    • @ZaurmagRu
      @ZaurmagRu Рік тому

      Импортировать defineProps не обязательно, ровно как и defineEmits. Vue делает это сам под капотом. Чтобы не было ошибки надо ввести комментариий выше вызова, который отключает это предупреждение. Уже не помню точно, но Webstorm например автоматом вставляет.

    • @KimarTV
      @KimarTV Рік тому

      @@ZaurmagRu Не понял какой комментарий? У меня не Webstorm ругается. А красный экран в браузере

    • @ZaurmagRu
      @ZaurmagRu Рік тому

      @@KimarTV Странно, что в браузере ошибка. По идее не должно быть...

  • @andreigovorukhin
    @andreigovorukhin 7 місяців тому

    Ну какой вайт? вит - ну елки палки

  • @---Maksim---
    @---Maksim--- 11 місяців тому

    Тащить ради 1 урла целую библиотеку не стило, Fetch API более чем достаточного для этого. Win и Lose не стоило тащить в хук, это отдельная часть логики, которая просто использует экспортируемые переменные из хука.

  • @user-rz7xz4wf8p
    @user-rz7xz4wf8p 10 місяців тому +1

    зачем нам correctLetters, если такую же проверку можно было сделать и просто с letters? Лишее computed свойство

    • @Ctrl_C.Ctrl_V
      @Ctrl_C.Ctrl_V 10 місяців тому

      Да, можно было. correctLetters используется просто для того чтобы не передавать весь массив, а передать уже отфильтрованный, не более

    • @user-rz7xz4wf8p
      @user-rz7xz4wf8p 10 місяців тому

      @@Ctrl_C.Ctrl_V а в этом же нет смысла. Массив все равно передается по ссылке. А вот лишняя переменная, ещё и вычисляемая, в данном случае избыточна :)

    • @Ctrl_C.Ctrl_V
      @Ctrl_C.Ctrl_V 10 місяців тому

      Да всё верно, я и не спорю) Ну мб автор увидит и ответит зачем так сделал))@@user-rz7xz4wf8p

  • @user-rz7xz4wf8p
    @user-rz7xz4wf8p 10 місяців тому

    буква "ш" это у нас вообще-то "ша", а не "аш" 🙃😉

  • @crazymoney2676
    @crazymoney2676 7 місяців тому +1

    Зря голос изменил, дизлайк , не возможно слушать ушами...

  • @sergy9119
    @sergy9119 2 місяці тому

    А у меня опять какое-то проклятье началось: сразу после выноса GameHeader в отдельный компонент в VSCode ошибка висит:
    Не удалось найти файл объявления модуля "./components/GameHeader.vue". "d:/dev/viselnik/src/components/GameHeader.vue" имеет неявный тип "any".ts(7016)
    У всех все так легко и просто на видео получается, а в жизни сидишь до 3 часов ночи и не понимаешь, что делать надо, и ни гугл, ни чатЖПТ не помогают😄 как исправить-то?