Следующая большая офлайновая конференция Vueconf US пройдет 15-17 мая 2024 года в Новом Орлеане, США
Перед этим 1 мая Эван выступит на более именитой Accel Open Source конференции
#event #vuejs
Перед этим 1 мая Эван выступит на более именитой Accel Open Source конференции
#event #vuejs
Git - это распределенная система контроля версий, которая позволяет нескольким разработчикам сотрудничать над проектом.
Git Flow - это модель ветвления, которая обеспечивает структурированный подход к управлению и совместной разработке кода.
Git Flow состоит из двух основных ветвей:
Git Flow также может включать несколько других веток, таких как
#git #gitflow
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
React взял для своего логотипа модель строения атома Розерфорда, предложенную им в начале 20 века. На ней показаны орбиты электронов вокруг ядра атома.
Однако данная модель довольно быстро была признана физиками недостоверной, противоречащей основным положениям электродинамики, подверглась корректировке и была полностью заменена с развитием квантовой физики, которая показала, что электроны вовсе не "шарики" и у них в принципе не может быть орбит (траекторий)
Таким образом, лого Реакта символизирует собой устаревшие и ошибочные знания и представления.
#react #logo
Кстати,
#petitvue #virtualdom
Vue 1
и petite-vue
не использовали/не используют Virtual DOM
petite-vue
- альтернативный сильно урезанный вариант Vue (занимает 6Kb), предоставляющий тот же синтаксис шаблонов и модель реактивности, что и стандартный Vue, но специально оптимизированый для "внедрения" небольшого количества интерактивности на существующую HTML-страницу, полученную с сервера.#petitvue #virtualdom
Где лучше всего в компоненте обращаться за данными на
В onMounted.
Потому что:
1. Нельзя просто так использовать
2. Если в запросе будет непойманная ошибка, то в
3. С точки зрения системного дизайна,
4. Были неоднократные свидетельства, что сетевой запрос в
Источник: vue-faq
#tip #api #hooks #scriptsetup #mounted
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
Vue FAQ
API сервис | Vue FAQ
Vue FAQ - information about Vue.js and frontend development in general
Если вы хотите у некоторых страниц сделать свой
#router #tip
title
(и meta 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
Мы уже рассказывали, как избежать дерганий экрана из-за появляющегося/исчезающего скроллбара при открытии модального окна. Вот еще один вариант по условию влиять на глобальные свойства через
#css #tip
Мы уже рассказывали, как избежать дерганий экрана из-за появляющегося/исчезающего скроллбара при открытии модального окна. Вот еще один вариант по условию влиять на глобальные свойства через
:has()
#css #tip
С Пасхой!
Афинский суд оправдал журналиста, который утверждал, что раскрыл тайну схождения Благодатного огня.
Как сообщает греческий портал avgi.gr, журналист Димитрис Аликакос в 2019 написал книгу о Благодатном огне, которую Иерусалимский Патриархат назвал богохульством.
Причиной иска стали материалы, включённые Аликакосом в его книгу и видеосюжет, из которых следовало, что церемония схождения Благодатного огня в Храме Гроба Господня является не чудом, а результатом человеческого вмешательства.
В 2018 году Димитрис Аликакос поехал в Иерусалим, чтобы исследовать ритуал схождения Благодатного огня. Он взял интервью у нескольких священников, в том числе у отвечающего за ритуальные предметы храма Гроба Господня архиепископа Исидора.
Архиепископ в разговоре в журналистом рассказал, что огонь зажигают с помощью зажигалки. Интервью вошло в книгу Аликасоса, вышедшую в 2019 году.После этого Иерусалимский патриархат подал судебный иск в адрес журналиста и обвинил его в клевете.
Суд постановил, что спорное видео соответствует действительности. В отношении журналиста вынесен оправдательный приговор.
#event #offtop
Афинский суд оправдал журналиста, который утверждал, что раскрыл тайну схождения Благодатного огня.
Как сообщает греческий портал avgi.gr, журналист Димитрис Аликакос в 2019 написал книгу о Благодатном огне, которую Иерусалимский Патриархат назвал богохульством.
Причиной иска стали материалы, включённые Аликакосом в его книгу и видеосюжет, из которых следовало, что церемония схождения Благодатного огня в Храме Гроба Господня является не чудом, а результатом человеческого вмешательства.
В 2018 году Димитрис Аликакос поехал в Иерусалим, чтобы исследовать ритуал схождения Благодатного огня. Он взял интервью у нескольких священников, в том числе у отвечающего за ритуальные предметы храма Гроба Господня архиепископа Исидора.
Архиепископ в разговоре в журналистом рассказал, что огонь зажигают с помощью зажигалки. Интервью вошло в книгу Аликасоса, вышедшую в 2019 году.После этого Иерусалимский патриархат подал судебный иск в адрес журналиста и обвинил его в клевете.
Суд постановил, что спорное видео соответствует действительности. В отношении журналиста вынесен оправдательный приговор.
#event #offtop
В подтверждение нашему недавнему совету по оптимизации js кода, твит Эвана:
Самое приятное в этом то, что вы можете писать хороший функциональный код, который выполняет итерации над коллекциями (аналогично map, filter и т.д.) с оптимизированной вручную производительностью.
Каждый раз, когда я использую map/filter в JS вместо обычных циклов for, мне кажется, что я добровольно отказываюсь от производительности.
#tip #optimization #evanyou
Самое приятное в этом то, что вы можете писать хороший функциональный код, который выполняет итерации над коллекциями (аналогично map, filter и т.д.) с оптимизированной вручную производительностью.
Каждый раз, когда я использую map/filter в JS вместо обычных циклов for, мне кажется, что я добровольно отказываюсь от производительности.
#tip #optimization #evanyou
Относительно неплохой список технологий и практик современного фронтенда
https://roadmap.sh/frontend
Роадмап по
#frontend #roadmap
https://roadmap.sh/frontend
Роадмап по
Vue.js
у них не очень#frontend #roadmap
roadmap.sh
Frontend Developer Roadmap: What is Frontend Development?
Learn what Frontend Development is, what frontend developers do and how to become a modern frontend developer using our community-driven roadmap.
Если попытаться использовать
то выходит ошибка:
Это потому, что
В то же время,
Чтобы использовать
Тем не менее, текст вышеуказанной ошибки не совсем корректен, потому что доступ к
Это удобно при создании, например, плагинов, когда доступа к своему синглтону
Кстати, на Хабре недавно была большая статья про контексты
#tip #provide #router
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
Сильно понравился нижний коммент.
#evanyou #vercel