Forwarded from mefody.dev
Интерактивный гайд по :has()
Ахмад Шадид в очередной раз выдал супер-подробный гайд. На этот раз про то, как работает родительский селектор
Что можно подсмотреть:
- Как правильно делать boolean-логику на основе
- Как радикально менять разметку на основе количества вложенных элементов (например, когда мало карточек — растягивать их на всю ширину, а когда много — рисовать плотно и колонками).
- Как делать фолбеки, если какого-то элемента нет (например, когда картинка товара есть — рисуем картинку, а когда нет — заранее подготовленный placeholder).
- Как изменять размеры контейнера на основе его содержимого (для маленьких виджетов резервировать поменьше места на сам контейнер в раскладке, для больших — побольше).
- Как сделать всплывашки и попапы, которые не перекрывают друг друга (очень хороший пример про GDPR-баннер и иконку чата с поддержкой, которые на большом количестве сайтов друг другу мешают).
- Как научить панель управления с кнопками визуально реагировать на наличие особенных кнопок внутри.
- Как сделать зависимые друг от друга инпуты (например, если значение select требует уточнения, рисуем инпут для этого уточнения).
- И многое другое.
Примеры из списка сразу хочется сделать на каком-нибудь React: затащить на клиент логику показа компонента в зависимости от пропсов, перерендерить при необходимости. Но в этом и огромное преимущество
Напоминаю, что не стоит забывать про старые браузеры, которые в
https://ishadeed.com/article/css-has-guide/
Ахмад Шадид в очередной раз выдал супер-подробный гайд. На этот раз про то, как работает родительский селектор
:has(), с полезными примерами.Что можно подсмотреть:
- Как правильно делать boolean-логику на основе
has().- Как радикально менять разметку на основе количества вложенных элементов (например, когда мало карточек — растягивать их на всю ширину, а когда много — рисовать плотно и колонками).
- Как делать фолбеки, если какого-то элемента нет (например, когда картинка товара есть — рисуем картинку, а когда нет — заранее подготовленный placeholder).
- Как изменять размеры контейнера на основе его содержимого (для маленьких виджетов резервировать поменьше места на сам контейнер в раскладке, для больших — побольше).
- Как сделать всплывашки и попапы, которые не перекрывают друг друга (очень хороший пример про GDPR-баннер и иконку чата с поддержкой, которые на большом количестве сайтов друг другу мешают).
- Как научить панель управления с кнопками визуально реагировать на наличие особенных кнопок внутри.
- Как сделать зависимые друг от друга инпуты (например, если значение select требует уточнения, рисуем инпут для этого уточнения).
- И многое другое.
Примеры из списка сразу хочется сделать на каком-нибудь React: затащить на клиент логику показа компонента в зависимости от пропсов, перерендерить при необходимости. Но в этом и огромное преимущество
:has() — ему не нужны фреймворки. При помощи этого селектора и дисциплины в именовании классов можно творить самые настоящие «умные» компоненты без единой строчки JavaScript. А это и меньший клиентский бандл, и меньшее количество ререндерингов.Напоминаю, что не стоит забывать про старые браузеры, которые в
:has() пока не умеют. Но если ваш проект работает с вечнозелёными браузерами, то уже можно внедрять: https://caniuse.com/css-has.https://ishadeed.com/article/css-has-guide/
Ishadeed
CSS :has() Interactive Guide
Everything you need to know about CSS :has() selector.
Ретро-гейминг на Pico Pi: создаём свою Dendy / Хабр
https://habr.com/ru/articles/796987/
https://habr.com/ru/articles/796987/
Хабр
Ретро-гейминг на Pico Pi: создаём свою Dendy
Игровая консоль Dendy на базе Pico Pi с экраном от смарт часов и беспроводной зарядкой. Все началось с покупки в магазине игровой консоли SUP, на которой были представлены игры моего детства. Игровая...
На собесе – соловей, на работе – бармалей. Почему на собеседовании кандидат один, а на деле – другой? / Хабр
https://habr.com/ru/articles/797699/
https://habr.com/ru/articles/797699/
Хабр
На собесе – соловей, на работе – бармалей. Почему на собеседовании кандидат один, а на деле – другой?
Часто бывает так, что на интервью мы видим одного кандидата, а после выхода к нам на работу он превращается в… нет, не тыкву, конечно. Но разница «до/после» нас серьезно поражает, и часто – не в...
Forwarded from Front End World
React, Vite and TypeScript: Get started in under 2 minutes
https://blog.nrwl.io/react-vite-and-typescript-get-started-in-under-2-minutes-3bd5cd836175
https://blog.nrwl.io/react-vite-and-typescript-get-started-in-under-2-minutes-3bd5cd836175
Forwarded from Front End World
Forwarded from Front End World
Forwarded from ServerAdmin.ru
На канале было много обучающего материала про git. Как курсы, так и тренажёры, игры. Но при этом я ни разу не упомянул про книгу с переводом на русский язык Pro Git (авторы Scott Chacon и Ben Straub). Она полностью переведена и выложена на сайте:
⇨ https://git-scm.com/book/ru/v2
Я не могу сказать, что это самая лучшая книга про git или что-то в этом роде, потому что других не читал. Но к этой возвращался много раз. На неё ведёт много поисковых запросов из поисковиков. Регулярно вижу их, когда что-то ищу по git. Некоторые главы книги я внимательно изучал, когда разбирался с какой-то темой.
Сейчас существует не так много обучающего материала в текстовом виде, да ещё в веб версии, с которой легко и удобно работать - искать, читать. Книга даже в электронном виде не так удобна для взаимодействия. А вот если она выложена по главам на сайте, то это уже другое дело. Да ещё и полностью бесплатно.
Там же, кстати, есть и pdf, и epub версия. И так же есть git версия на github:
⇨ https://github.com/progit/progit2-ru
#обучение #git
⇨ https://git-scm.com/book/ru/v2
Я не могу сказать, что это самая лучшая книга про git или что-то в этом роде, потому что других не читал. Но к этой возвращался много раз. На неё ведёт много поисковых запросов из поисковиков. Регулярно вижу их, когда что-то ищу по git. Некоторые главы книги я внимательно изучал, когда разбирался с какой-то темой.
Сейчас существует не так много обучающего материала в текстовом виде, да ещё в веб версии, с которой легко и удобно работать - искать, читать. Книга даже в электронном виде не так удобна для взаимодействия. А вот если она выложена по главам на сайте, то это уже другое дело. Да ещё и полностью бесплатно.
Там же, кстати, есть и pdf, и epub версия. И так же есть git версия на github:
⇨ https://github.com/progit/progit2-ru
#обучение #git
Forwarded from Javascript
Проверь себя!
/**
* Нужно написать функцию, которая принимает число N и возвращает функцию,
* вызов которой первые N раз возвращает 'yes', а потом – 'no'.
*/
function canGetCount(n) {
// code here
}
const getOne = canGetCount(2);
getOne() === 'yes'
getOne() === 'yes'
getOne() === 'no'
@javascriptv
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Заметки про React
Лучшие практики по написанию тестов с React Testing Library
Правильно написанные тесты не только предотвращают ошибки в коде, но и в случае React Testing Library улучшают доступность компонента. В своем блоге Алекс Хоменко собрал лучшие практики по написанию тестов с React Testing Library, кратко о них:
- Использовать *ByRole селекторы. Они наиболее надежны и работают для многих элементов. Использование *ByRole селекторов приучают к написанию доступных компонентов. Пример:
- Использовать userEvent вместо fireEvent для симуляции событий. Хотя fireEvent работает во многих случаях, это легкая обертка над dispatchEvent. Также, в новых версиях React Testing Library рекомендуется инициализировать userEvent перед использованием:
- Использовать findBy* вместо waitFor. Бывают случаи, когда элемент, который пытаемся использовать, недоступен при первоначальном рендеринге и появится после получения данных из API. Для таких сценариев можно использовать асинхронный селектор findBy*, который внутри себя использует waitFor. Пример:
- Исправление ошибки
Еще одна из причин данной ошибки может быть неправильная работа с таймерами. Если компонент использует таймеры, то используйте моки для таймеров (useFakeTimers).
https://claritydev.net/blog/improving-react-testing-library-tests
Правильно написанные тесты не только предотвращают ошибки в коде, но и в случае React Testing Library улучшают доступность компонента. В своем блоге Алекс Хоменко собрал лучшие практики по написанию тестов с React Testing Library, кратко о них:
- Использовать *ByRole селекторы. Они наиболее надежны и работают для многих элементов. Использование *ByRole селекторов приучают к написанию доступных компонентов. Пример:
it("should submit correct form data", async () => {
/** --snip-- */
await user.type(screen.getByRole("textbox", { name: "Name" }), "Test");
await user.click(screen.getByRole("button", { name: "Sign up" }));
/** --snip-- */
});
- Использовать userEvent вместо fireEvent для симуляции событий. Хотя fireEvent работает во многих случаях, это легкая обертка над dispatchEvent. Также, в новых версиях React Testing Library рекомендуется инициализировать userEvent перед использованием:
it("should save correct data on submit", async () => {
/** --snip-- */
const user = userEvent.setup();
await user.type(screen.getByRole("textbox", { name: "Name" }), "Test");
/** --snip-- */
});
- Использовать findBy* вместо waitFor. Бывают случаи, когда элемент, который пытаемся использовать, недоступен при первоначальном рендеринге и появится после получения данных из API. Для таких сценариев можно использовать асинхронный селектор findBy*, который внутри себя использует waitFor. Пример:
it("renders without breaking", async () => {
render(<ListPage />);
expect(
await screen.findByRole("heading", { name: "List of items" }),
).toBeInTheDocument();
});
- Исправление ошибки
Fixing the "not wrapped in act(...)" warnings. Одной из причин ошибки может быть использование getBy* вместо findBy*, поскольку рассматриваемый элемент или компонент обновляется после асинхронного действия. Еще одна из причин данной ошибки может быть неправильная работа с таймерами. Если компонент использует таймеры, то используйте моки для таймеров (useFakeTimers).
https://claritydev.net/blog/improving-react-testing-library-tests
claritydev.net
Best Practices for Writing Tests with React Testing Library
Properly written tests not only help prevent regressions and buggy code, but in the case of React Testing Library, they also improve the accessibility of components and the overall user experience. In this post, we'll explore how to get the most out of your…
Продуктовый подход к pet-проекту или как я разработал музыкальное веб-приложение / Хабр
https://habr.com/ru/articles/803673/
https://habr.com/ru/articles/803673/
Хабр
Продуктовый подход к pet-проекту или как я разработал музыкальное веб-приложение
Что будет, если соединить любовь к музыке и к разработке? В моем случае получился pet-проект по созданию музыкального стримингового веб-приложения. Меня зовут Андрей, я работаю frontend-разработчиком...
Бэкапы для самых маленьких и матерых / Хабр
https://habr.com/ru/companies/selectel/articles/804183/
https://habr.com/ru/companies/selectel/articles/804183/
Хабр
Бэкапы для самых маленьких и матерых
Представьте: вы недавно основали небольшое веб-приложение. Но только он стал расти как полноценный проект — Бац! — серверы легли, а данные не сохранились. Нужно было делать бэкапы. Казалось бы, совет...
Состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript / Хабр
https://habr.com/ru/news/804665/
https://habr.com/ru/news/804665/
Хабр
Состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript
1 апреля 2024 года состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript с возможностью отладки кода и поддержкой популярных веб-фрейворков. Это событие произошло спустя шесть месяцев...
Forwarded from mefody.dev
Мгновенная валидация форм
Юлия Макарова делится рецептом, как сделать нативную валидацию форм без фреймворков. Сразу с продумыванием доступности. Как будто можно брать и копировать в свои пет-проекты как основу.
https://doka.guide/recipes/validation/
Юлия Макарова делится рецептом, как сделать нативную валидацию форм без фреймворков. Сразу с продумыванием доступности. Как будто можно брать и копировать в свои пет-проекты как основу.
https://doka.guide/recipes/validation/
Дока
Мгновенная валидация форм — Рецепты — Дока
На лету проверяем, правильно ли пользователь заполнил поля формы.
Forwarded from Заметки разработчика
Все мы — используем git каждый день, однако большинство из нас, как будто задержались в 2005 году, используют только основные команды, такие как add, commit, push или pull.
https://www.dev-notes.ru/articles/git/modern-git-commands-and-features/
https://www.dev-notes.ru/articles/git/modern-git-commands-and-features/
Заметки разработчика
Современные команды и возможности Git
Все мы — используем git каждый день, однако большинство из нас, как будто в 2005, используют только основные команды, такие как add, commit, push или pull.
От «здравствуйте» до こんにちは: языки программирования не на английском языке / Хабр
https://habr.com/ru/companies/sberbank/articles/806051/
https://habr.com/ru/companies/sberbank/articles/806051/
Хабр
От «здравствуйте» до こんにちは: языки программирования не на английском языке
Существует огромное количество самых разных языков программирования, их насчитывается несколько тысяч. Какие‑то — идеальны для работы, другие же созданы just for fun. К слову, есть...
Forwarded from For Web — фронтенд, дизайн, программирование
ESLint Config Inspector, добавленный в ESLint 9.0.0 визуальный инспектор правил из вашего конфига, призванный упростить исследование конфигураций с большим количеством оверрайдов и плагинов → https://eslint.org/blog/2024/04/eslint-config-inspector/
Локальный веб-сервер для разработки с помощью Docker / Хабр
https://habr.com/ru/companies/usetech/articles/808025/
https://habr.com/ru/companies/usetech/articles/808025/
Frontend внутри Bitrix. Использование и написание экстеншенов + SPA приложение на Vue или React / Хабр
https://habr.com/ru/articles/810581/
https://habr.com/ru/articles/810581/
Хабр
Frontend внутри Bitrix. Использование и написание расширений + SPA приложение на Vue или React
В данной статье мы рассмотрим правильный подход к Frontend разработке в Bitrix. А именно разделение на расширения которые сможем подключать в любой момент времени. + напишем SPA приложение на Vue и...
👍2