Vue-FAQ
919 subscribers
556 photos
90 videos
548 links
Канал сайта https://vue-faq.org
Информация о Vue.js, фронтенд разработке и не только

Contacts: @RuslanMakarov
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
После прочтения первой книжки из списка выше

#humor #video
Следующая большая офлайновая конференция Vueconf US пройдет 15-17 мая 2024 года в Новом Орлеане, США

Перед этим 1 мая Эван выступит на более именитой Accel Open Source конференции

#event #vuejs
Git - это распределенная система контроля версий, которая позволяет нескольким разработчикам сотрудничать над проектом.

Git Flow
- это модель ветвления, которая обеспечивает структурированный подход к управлению и совместной разработке кода.

Git Flow состоит из двух основных ветвей: main (бывшая master) branch и develop branch. main ветка представляет собой стабильную, выпущенную версию кодовой базы, а develop служит интеграционной веткой, в которой разрабатываются новые функции и исправления ошибок.

Git Flow также может включать несколько других веток, таких как feature, release и hotfix. Ветви feature создаются для каждой новой разрабатываемой функции или улучшения и после завершения работы сливаются в ветвь develop. Ветви release создаются, когда готовится новый релиз, и сливаются в ветви main и develop, когда релиз готов. Ветки hotfix создаются, когда необходимо внести критическое исправление в main ветку, и сливаются обратно в ветки main и develop.

#git #gitflow
Фронтенд неисчерпаем

React взял для своего логотипа модель строения атома Розерфорда, предложенную им в начале 20 века. На ней показаны орбиты электронов вокруг ядра атома.

Однако данная модель довольно быстро была признана физиками недостоверной, противоречащей основным положениям электродинамики, подверглась корректировке и была полностью заменена с развитием квантовой физики, которая показала, что электроны вовсе не "шарики" и у них в принципе не может быть орбит (траекторий)

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

#react #logo
Volar 2 продолжает колбасить улучшаться

#volar
Кстати, Vue 1 и petite-vue не использовали/не используют Virtual DOM

petite-vue - альтернативный сильно урезанный вариант Vue (занимает 6Kb), предоставляющий тот же синтаксис шаблонов и модель реактивности, что и стандартный Vue, но специально оптимизированый для "внедрения" небольшого количества интерактивности на существующую HTML-страницу, полученную с сервера.

#petitvue #virtualdom
Где лучше всего в компоненте обращаться за данными на backend API - в теле script setup, или в хуке жизненного цикла onMounted?

В onMounted.

Потому что:

1. Нельзя просто так использовать await в корне сетапа, это требует наличия Suspense и делает компонент асинхронным и ненужно усложняет приложение. Поэтому приходится использовать промисный then или IIFE , что может нарушить общий code style, хуже читается и менее удобно.

2. Если в запросе будет непойманная ошибка, то в script setup её не обработать, в отличие от хука.

3. С точки зрения системного дизайна, script setup - это конструктор компонента. Запрашивать в нем данные из внешних источников нелогично.

4. Были неоднократные свидетельства, что сетевой запрос в script setup не работал правильно, а при переносе в onMounted - работал. Зависит от контекста, но тем не менее.

Источник: vue-faq

#tip #api #hooks #scriptsetup #mounted
Две версии происхождения порта 5173 у Vite dev сервера:

1. SITE
2. VITE (с V = римская "5")

#vite
Vite обогнал по числу GitHub звезд Webpack

Сравнение данной популярности различных JS сборщиков

#vite #webpack #bundler
Если вы хотите у некоторых страниц сделать свой titlemeta description), то это органично делается через routes и router navigation guard безо всяких useHead-ов

export const routes = [{
name: 'about',
path: '/about',
meta: {
title: 'My name is Bond',
description: 'James Bond',
}
}];


router.beforeEach((to) => {
const { title, description } = to.meta;

document.title = title || 'Default Title';

document
.querySelector('head meta[name="description"]')
.setAttribute('content', description || 'Default Description')
})


#router #tip
Еще один пример функциональности современного CSS

Мы уже рассказывали, как избежать дерганий экрана из-за появляющегося/исчезающего скроллбара при открытии модального окна. Вот еще один вариант по условию влиять на глобальные свойства через :has()

#css #tip
С Пасхой!

Афинский суд оправдал журналиста, который утверждал, что раскрыл тайну схождения Благодатного огня.

Как сообщает греческий портал
avgi.gr, журналист Димитрис Аликакос в 2019 написал книгу о Благодатном огне, которую Иерусалимский Патриархат назвал богохульством.

Причиной иска стали материалы, включённые Аликакосом в его книгу и видеосюжет, из которых следовало, что церемония схождения Благодатного огня в Храме Гроба Господня является не чудом, а результатом человеческого вмешательства.

В 2018 году Димитрис Аликакос поехал в Иерусалим, чтобы исследовать ритуал схождения Благодатного огня. Он взял интервью у нескольких священников, в том числе у отвечающего за ритуальные предметы храма Гроба Господня архиепископа Исидора.

Архиепископ в разговоре в журналистом рассказал, что огонь зажигают с помощью зажигалки. Интервью вошло в книгу Аликасоса, вышедшую в 2019 году.После этого Иерусалимский патриархат подал судебный иск в адрес журналиста и обвинил его в клевете.


Суд постановил, что спорное видео соответствует действительности. В отношении журналиста вынесен оправдательный приговор.

#event #offtop
This media is not supported in your browser
VIEW IN TELEGRAM
С утра на PHP распарсиваю HTML для нового пет-проекта

Настроение:

#pet #php #video
В подтверждение нашему недавнему совету по оптимизации js кода, твит Эвана:

Самое приятное в этом то, что вы можете писать хороший функциональный код, который выполняет итерации над коллекциями (аналогично map, filter и т.д.) с оптимизированной вручную производительностью.

Каждый раз, когда я использую map/filter в JS вместо обычных циклов for, мне кажется, что я добровольно отказываюсь от производительности.

#tip #optimization #evanyou
Относительно неплохой список технологий и практик современного фронтенда
https://roadmap.sh/frontend

Роадмап по Vue.js у них не очень

#frontend #roadmap
Код - как юмор. Если вы должны объяснять его, то он плох.

#quote
Если попытаться использовать vue-router в js/ts модуле или composable функции,

import { useRouter } from "vue-router";

function foo() {
const router = useRouter();
}


то выходит ошибка:

[Vue warn]: inject() can only be used inside setup() or functional components.


Это потому, что vue-router, Pinia, PrimeVue.Toast и многие другие библиотеки используют provide/inject для глобального внедрения своих элементов в ваше приложение.

// vuejs/packages/router/src/useApi.ts

export function useRouter(){
return inject(routerKey)
}


В то же время, provide/inject во Vue работает только в контексте приложения.

Чтобы использовать vue-router в js модулях приходится создавать отдельный синглтон для router, инициализировать его через createRouter() и затем использовать обычный ES импорт где надо. Почему вместо стандартного ES экспорта/импорта сделано такое усложнение через provide/inject не совсем понятно.

Тем не менее, текст вышеуказанной ошибки не совсем корректен, потому что доступ к inject() можно получить явно выполнив код в контексте приложения:

// plugins/debug.ts
import { useRouter } from "vue-router"

export default {
install(app) {
app.runWithContext(() => {
const router = useRouter();
router.addRoute({ "/debug", () => import('@/views/DebugView.vue') });
})
}
}


Это удобно при создании, например, плагинов, когда доступа к своему синглтону router еще нет.

Кстати, на Хабре недавно была большая статья про контексты Vue и Nuxt

#tip #provide #router
Эван выбрался из своего Сингапура на Accel Open Source конференцию и гуляет по Сан-Франциско перед отъездом домой.

Сильно понравился нижний коммент.

#evanyou #vercel