// useUserService.ts
function isAuthenticated() {
return !!user.value;
}
// Component A
<script>
const { isAuthenticated } = useUserService();
</script>
<template>
<p v-if="isAuthenticated()">hello</p>
</template>
Функции во
Vue
ведут себя не совсем как функцииВ данном примере функция
isAuthenticated()
ведет себя как computed
и будет вызываться каждый раз, когда user
изменится или компонент А
будет перерисовываться.Происходит это из-за того, что
Vue
определяет все реактивные зависимости внутри тела функции и перерендивает компонент, когда кто-то из них меняется.Таким образом, большой разницы в использовании функции вместо
computed
нет. Но если внутри большая логика, то лучше использовать computed
, потому что он будет пересчитываться только когда его зависимости изменились, а функция - при любом рендеринге#reactivity #tip #optimization
❤10💩3👍2😁2👎1🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
❤16🤡7👍4😁4💩4🤔3😎2👎1🌚1💯1
Еще одна
proxima-vue
В альфа версии, но кода много
#ui #lib
UI
библиотека на Vue 3
от нашего соотечественника для ознакомленияproxima-vue
В альфа версии, но кода много
#ui #lib
proxima.wiki
UI Component Library for Vue 3 and Nuxt
👍9
👍8🆒5🤩2😍2
Options API
- это FSD
Composition API
с composables
- модульная архитектура.(аналогия)
FSD
в основу иерархичного разбиения ставит программный функционал. Модульная - доменные сущностиМожно провести аналогию c физиологией человека
Можно изучать человека разбивая его на руки, ноги, тело, голову и внутри уже по органам, тканям и т.д.
FSD
же на верхнем уровне разбивает сперва по органам и тканям - кровеносная система, ЖКТ, мышечные ткани, и внутри уже разбивает по доменам - рот и кишечник внутри ЖКТТак же и с переходом от
Options API
к Composition API
. Было разбиение по фичам (options
), стало - по бизнес / доменным сущностям (композициям). Так лучше.
#fsd #architecture
👍6🔥2💩1💯1
Про
Целью их является стилизация элементов в зависимости от контекста родительского контейнера.
Они позволяют создавать правила, которые применяются только при выполнении определенных условий относительно стиля контейнера.
Это дает возможность создавать более адаптивные и контекстно-зависимые стили и стилизовать компоненты в зависимости от их окружения.
В планах поддержка проверки функцией
#css
Container size queries
уже все знают. но про Container style queries
еще далеко не всеЦелью их является стилизация элементов в зависимости от контекста родительского контейнера.
Они позволяют создавать правила, которые применяются только при выполнении определенных условий относительно стиля контейнера.
Это дает возможность создавать более адаптивные и контекстно-зависимые стили и стилизовать компоненты в зависимости от их окружения.
.card {
/* ...стили для карточки... */
}
@container style(--background-color: #333) {
.card {
/* Стили для карточки, когда у ее родителя темный фон */
color: white;
}
}
В планах поддержка проверки функцией
style()
не только CSS
custom properties
, но и простых - style(color: green)
.Caniuse
везде, кроме Firefox
#css
🔥31❤2💩2👍1
Сколько фронтендеров (включая вас) работает на вашем текущем (последнем) Vue проекте?
Anonymous Poll
34%
Работаю solo
19%
2
15%
3
11%
4-5
6%
6-10
6%
11-20
3%
Много
6%
Я не Vue разработчик
Для
Для
Добавьте в скрипты своего
Считает число компонент в проекте.
#tip
Linux
:"count:sfc": "find . -type f -name '*.vue' ! -path '*/node_modules/*' | wc -l"
Для
Windows
:"count:sfc": "Get-ChildItem -Recurse -Include *.vue -Exclude '*/node_modules/*' | Measure-Object -Line"
Добавьте в скрипты своего
package.json
. Считает число компонент в проекте.
#tip
👍11
Теперь попробуем посчитать среднюю компонентную нагрузку на одного vue-разработчика
Возмите суммарное число компонент на ваших активных проектах и поделите на число фронтенд-разработчиков на них, включая вас
Возмите суммарное число компонент на ваших активных проектах и поделите на число фронтенд-разработчиков на них, включая вас
Anonymous Poll
14%
<30
15%
30-50
15%
50-100
11%
100-150
3%
150-200
5%
200-300
12%
300+
24%
Не делится
🥴9👍1
Сравнение бесплатных web версий
Давно заметил, что у
#ai #learning
Gemini 1.5
, Grok
и Copilot
на одном запросе. Gemini 2.0-flash
тоже с axios
начала.Давно заметил, что у
Gemini
часто на голову выше других по качеству ответы. Хоть Google
и корпорация зла.Ai
можно эффективно использовать как инструмент для обучения. Но тема обучения должна быть достаточно хорошо изучена, с устоявшимися "лучшими практиками"#ai #learning
👍5🤡1
Написал vite-plugin-json-md
Заменяет в
Удобен при
Обрабатывает как инлайн вставки
#lib #i18n #markdown
Заменяет в
JSON
/JSON5
файлах markdown
на сконвертированный HTML
Удобен при
i18n
(интернационализации), когда текст перевода лежит в json
файлах, но иногда бывает на странице сложное форматирование и разбивать по ключам очень хаотично. Можно записать тогда через markdown
.Обрабатывает как инлайн вставки
markdown
, так и ссылки на внешние md
файлы#lib #i18n #markdown
npm
npm: vite-plugin-json-md
Vite plugin for processing markdown in JSON files. Latest version: 0.7.2, last published: 3 months ago. Start using vite-plugin-json-md in your project by running `npm i vite-plugin-json-md`. There is 1 other project in the npm registry using vite-plugin…
❤🔥9👍3
Infinity scroll vs. Virtual scroll
Infinity scroll
Загружается дополнительный контент по мере прокрутки страницы. Используется AJAX или аналогичные методы для подгрузки данных с сервера и добавления их в конец списка по мере достижения пользователем конца страницы.
Пользователи видят новый контент без необходимости нажимать кнопку "Загрузить еще" или переходить на другую страницу. Это обеспечивает плавный и непрерывный просмотр.
Производительность ухудшается с увеличением объема данных в DOM, поскольку все данные рендерятся одновременно.
Virtual scroll
Улучшение производительности больших списков происходит за счет рендеринга только видимой части данных. Поддерживается фиксированное количество элементов в DOM, контент которых обновляется динамически в зависимости от позиции прокрутки.
Пользователи также прокручивают список, но рендерятся только видимые элементы, что значительно улучшает производительность, особенно для очень больших списков. Это снижает нагрузку на память и улучшает плавность прокрутки.
#scroll
Infinity scroll
Загружается дополнительный контент по мере прокрутки страницы. Используется AJAX или аналогичные методы для подгрузки данных с сервера и добавления их в конец списка по мере достижения пользователем конца страницы.
Пользователи видят новый контент без необходимости нажимать кнопку "Загрузить еще" или переходить на другую страницу. Это обеспечивает плавный и непрерывный просмотр.
Производительность ухудшается с увеличением объема данных в DOM, поскольку все данные рендерятся одновременно.
Virtual scroll
Улучшение производительности больших списков происходит за счет рендеринга только видимой части данных. Поддерживается фиксированное количество элементов в DOM, контент которых обновляется динамически в зависимости от позиции прокрутки.
Пользователи также прокручивают список, но рендерятся только видимые элементы, что значительно улучшает производительность, особенно для очень больших списков. Это снижает нагрузку на память и улучшает плавность прокрутки.
#scroll
👍7
В и утащить всю кодовую базу.
#vite #bug
Vite
нашли и пофиксили уязвимость - чужой сайт мог обратиться на ваш dev
сервер Attack scenario:Обновление вышло сразу для трех последних мажорных версий как
- The attacker serves a malicious web page (http://malicious.example.com).
- The user accesses the malicious web page.
- The attacker sends a fetch('http://127.0.0.1:5173/main.js') request by JS in that malicious web page. This request is normally blocked by same-origin policy, but that's not the case for the reasons above.
- The attacker gets the content of http://127.0.0.1:5173/main.js.
patch
, но для некоторых может оказаться breaking change
. Подробней - в релизе.#vite #bug
👍3