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

Contacts: @RuslanMakarov
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
Через неделю после разноса Минина АйТиБородой пришла ответка от Владилена.

По результатам он, в целом, упрочил свое положение среди своей аудитории.

И согласился на дебаты с Мурычем.

#minin #itbeard
Adaptability vs. Responsiveness

Разница между адаптивностью (слева) и отзывчивостью (справа)

#css #ui
Есть два основных подхода для аутентификации пользователя

Аутентификация на основе сессии

При этом подходе вы храните информацию о сессии в базе данных или хранилище сессий и передаете идентификатор сессии пользователю.

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

Вот как это работает:

- Пользователь делает запрос на вход в систему, и он отправляется на внутренний сервер..
- Бэкэнд создает сессию с использованием секретного ключа и сохраняет данные в хранилище сессий.
- Сервер отправляет клиенту cookie с уникальным идентификатором сессии.
- Пользователь делает новый запрос, и браузер отправляет идентификатор сессии вместе с запросом.
- Сервер аутентифицирует пользователя по идентификатору сессии.

Аутентификация на основе JWT

В подходе на основе JWT информация о сессии не хранится в хранилище сессий.

Вся информация доступна в токене.

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

Вот как это работает:

- Пользователь делает запрос на вход в систему, и он отправляется на внутренний сервер.
- Сервер проверяет учетные данные и выдает JWT. JWT подписывается с помощью закрытого ключа и не требует хранения сессии.
- JWT передается клиенту либо в виде cookie, либо в теле ответа. У обоих подходов есть свои плюсы и минусы.
- При каждом последующем запросе браузер отправляет cookie с JWT.
- Сервер проверяет JWT с помощью секретного закрытого ключа и извлекает информацию о пользователе.

#jwt #auth
Есть инструмент для облегчения миграции с миксинов на композаблы - vue-mixable
Автор - член Vue.js команды Linus Borg

#mixins
// Vue 3
const app = createApp(App);
app.config.errorHandler = (err) => {
alert(err);
};


Во Vue можно создать собственный обработчик ошибок и ворнингов для лучшей обработки ошибок для улучшения UX.

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

Обработчик ворнингов работает только в dev режиме.

#tip
Для чего нужны tsconfig.node.json, tsconfig.json, (tsconfig.vitest.json)?

В проектах Vue, созданных с помощью Vite, используются несколько файлов конфигурации TypeScript, каждый из которых играет свою роль в компиляции и тестировании TypeScript-кода.

tsconfig.json:

- Основной файл конфигурации TypeScript.
- Определяет глобальные настройки TypeScript для всего проекта, такие как целевая версия JavaScript, модульная система, пути к файлам и т.д.
- Может включать ссылки на другие файлы конфигурации TypeScript (extends, references).
- tsconfig.json по умолчанию не используется в Vite для компиляции кода.

tsconfig.node.json:

- Конфигурация TypeScript для среды Node.js.
- Определяет настройки TypeScript, специфичные для компиляции кода в Node.js.
- Используется Vite для компиляции TypeScript-кода серверной части приложения.

#vite #ts #nodejs
0 == "0"
// true

0 == []
// true

"0" == []
// false


Волшебство JavaScript

#js
Вроде бы еще совсем недавно размер node_modules на пустом Vue проекте был 150Мб, и вот уже 600...

#npm
При попытке пользователя уйти с сайта (exit-intent), можно показывать сообщение (мольба остаться, подарок суперскидки, предложение сохранить сделанные изменения и т.п.)

Вот пример Vue 3 композабла для этого

#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вам такое?

#java #gwt
Почти анекдот получился

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

Потратил несколько дней, начальнику показываю. Он так одним глазом смотрит и говорит:

- Это все теперь не надо. У нас будет одна кнопка, пользователь на нее нажимает, и AI чатбот с него всю информацию в режиме голосового диалога собирает. Круто?

Че тут скажешь, конечно круто. Космос, ёпта...

#meme
Кое-что новое

В отношениях родитель-ребенок-слот содержимому слота ребенок может передавать пропсы, как указано в документации:

<!-- <MyComponent> template -->
<div>
<slot :text="msg"></slot>
</div>

<MyComponent v-slot="{ text }">
{{ text }}
</MyComponent>


Часто нужно и событие из слота переслать в ребенка. Напрямую сделать это нельзя, но можно также пропсом передать слоту ссылку на метод в ребенке, который тот и вызовет по событию:

<!--   FormField   -->
<script>
const touched = ref(false);
</script>

<template>
<div class="form-field">
<slot :touch="() => { touched = true }" />
...
</div>
</template>

<!-- использование -->
<FormField v-slot="{ touch }">
<BaseInput @input="touch()" />
</FormField>


Этот хак бывает очень полезен и не выходит за рамки правила: "Пропсы вниз, события вверх".

#tip #slots