Настя Котова // Frontend & Node.js
575 subscribers
39 photos
2 files
108 links
Фронтендерица с лапками 🐾
Посты каждый понедельник 💃 Копаюсь во внутрянке технологий и рассказываю вам
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Как сделать свой контент интерактивным?

contenteditable — это атрибут HTML, который можно добавить к любому элементу, чтобы сделать его редактируемым. Когда этот атрибут установлен, пользователь может кликнуть по элементу и начать вносить изменения в текстовое содержимое.


export const EditableRow: FC = () => {
return (
<p className="EditableRow" contentEditable="true">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
nibh euismod tincidunt ut laoreet dolore magna aliquam erat.
</p>
);
};


Часто это свойство используют для реализации собственных текстовых редакторов или какого-то специфичного интерфейсного решения, связанного с редактированием. Но, конечно, не стоит забывать, что для обычных форм с заполнением данных лучше всего подходят нативные теги input и textarea.
Особенность клавиатурного управления в Safari

Основной способ обеспечения доступности в браузере — это возможность управления с помощью клавиатуры. Это позволяет пользователям без использования мыши беспрепятственно переходить по интерактивным элементам сайта, таким как кнопки и ссылки. Так, в большинстве браузеров для перемещения по элементам используется клавиша Tab, а для обратного перемещения — сочетание Shift + Tab.

Однако особое внимание стоит уделить Safari: в этом браузере по умолчанию не работает переход между кнопками и ссылками с помощью клавиши Tab. Вместо этого нужно использовать сочетание Option + Tab для переключения фокуса. Если же вы хотите использовать стандартный метод с Tab, необходимо включить эту функцию в расширенных настройках браузера.
👍1
Кастомизация ввода даты с помощью showPicker()

Иногда нам может понадобиться использовать стандартный ввод даты с помощью элемента input[type='date'], но при этом хочется кастомизировать триггер, который будет по клику открывать календарь для выбора даты.

Тут на помощь может прийти метод showPicker() – относительно новая возможность определённых видов элемента input открывать пикер программно. Таким образом, можно скрыть сам инпут за стилизованной кнопкой, но при клике на неё вызывать открытие календаря.

Данный метод существует для множества видов инпутов – datemonthweektimedatetime-localcolor и file. Однако для каждого вида есть свои ограничения в поддержке различными браузерами. Например, выбор времени, недели и месяца не будет работать в Firefox. Подробнее с поддержкой можно ознакомиться на caniuse.

Для выбора даты в некоторых старых браузерах можно использовать обходной вариант с эмуляцией фокуса и клика по инпуту. Однако этот подход всё ещё может быть рискованным, поэтому всегда советуем тестировать решение на разных платформах, которые поддерживает ваше приложение.
Используем debugger в JavaScript для эффективной отладки кода

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

1. Добавьте debugger; в нужную строку вашего JavaScript-кода
2. Откройте DevTools, перейдите в раздел "Sources", и вы увидите, что выполнение остановилось в месте, где вы вставили debugger;

Также вы можете использовать debugger; в условных операторах для отладки только при выполнении определенных условий.
Одна из самых мощных функций DevTools - это возможность ставить точки останова в JavaScript-коде. В прошлом посте мы рассмотрели один из удобных способов это сделать - с помощью команды debugger; в JavaScript. Сегодня же поговорим поподробнее, как работать с точками останова в DevTools на примере Google Chrome.

Инструменты отладки: точки останова и дебаг в DevTools
Оптимизация хранения данных с помощью битовой маски в JavaScript

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

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

Мы можем хранить данные об активных флагах в cookie, для того чтобы иметь к ним доступ во время SSR (server side rendering). Но максимальный объем хранимой информации в cookie сильно ограничен, а флагов может быть большое количество. Поэтому, вместо использования нескольких переменных, мы можем хранить все эти флаги в одном числе.


const NEW_BUTTON_FLAG = 1; // 0001
const NEW_PAGE_FLAG = 2; // 0010
const NEW_FORM_FLAG = 4; // 0100
const NEW_API_FLAG = 8; // 1000

let userFlags = 0;

// Включаем нужные флаги
userFlags = userFlags | NEW_FORM_FLAG | NEW_BUTTON_FLAG; // 0101

// Проверяем, активен ли флаг у пользователя
const showNewForm = (userFlags & NEW_FORM_FLAG) !== 0; // true
const showPageForm = (userFlags & NEW_PAGE_FLAG) !== 0; // false

// Убираем флаг
userFlags &= ~NEW_BUTTON_FLAG;
console.log(userFlags.toString(2)); // 100


С помощью побитовых операций (|, & и ~) мы можем добавлять, удалять, а также проверять флаги.
1👍1
Настя Котова // Frontend & Node.js
🚀 React Compiler Сегодня разберем новый экспериментальный компилятор от команды React — React Compiler. Этот компилятор призван улучшить производительность приложений React, оптимизируя их на этапе сборки. Пока он еще в стадии разработки, но уже доступен…
Несколько месяцев назад мы писали про новый экспериментальный компилятор от React - React Compiler.

И вот недавно команда анонсировала бета-версию этого компилятора в своем блоге.

Как они пишут, React Compiler будет работать в том числе на версиях React 17 и выше. Кроме того, разработчики Next.js уже поддержали новый компилятор в 15 версии, пока в экспериментальном режиме. Команда React также рекомендует установить плагин ESLint уже сейчас, невазисимо от использования React Compiler.

Ждем релиза, и готовимся внедрять в свои проекты, чтобы навсегда забыть про React.iss.onemo!)
Все мы часто используем в работе такие единицы измерения, как vh и vw, в основном, чтобы заставить какой-то блок растянуться на всю область видимости, указав для него width: 100vw; и height: 100vh;

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

Дело в том, что у мобильных браузеров есть два режима отображение собственного интерфейса - полноценная версия, и более компактная, которая появляется при скролле. Обратите внимание на панель браузера, когда скроллите какой-то сайт на телефоне - она в какой-то момент будет “ужиматься”.

Чтобы учесть это, лучше всего заменять vh и vw на dvh и dvw, единицы измерения для динамического вьюпорта. На десктопных браузерах они будут работать без изменений, а вот на мобильных при любом из вариантов отображения браузера - компактном или полноценном - будут подстраиваться под него. Если же все время использовать vh и vw, то при отображении полноценной навигации в браузере будет появляться дополнительный скролл. Этот эффект можно наглядно увидеть на примере с Doka (откройте его с мобильного браузера).

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

P.S. На эту тему также есть интересная статья на dev.to.
👍1🔥1
Всем привет! На связи Настя)

В определенный момент развития своей карьеры фронтенд-разработчика я начала сталкиваться с вопросом «Куда мне расти?». С одной стороны, казалось, что все основные технологии я уже освоила. Но каждый раз, натыкаясь на новое для себя CSS-свойство или метод в JavaScript, я убеждалась в обратном. «Как же много всего я упускаю» - думала про себя.

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

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

Спустя какое-то время, мы с Машей и Олей собрались в Codeca Frontend, и в тот момент эта идея возродилась. К ней добавилась идея того, как полезно было бы новичкам иметь максимально подробный план со всеми ресурсами для изучения, чтобы, идя по нему, можно было оценить, на каком этапе ты сейчас находишься, и сколько еще тебе осталось до твоего первого собеседования.

Так появился наш проект - роадмап фронтендера. Честно, столько всего нового, сколько я узнала за время подготовки этого роадмапа, я давно не узнавала. И даже многие идеи постов для этого канала появлялись именно оттуда.

В этот роадмап мы вложили все наши знания (и даже чуть больше), собрали их в большой план по шагам, разделили по уровням и темам, и к каждой теме подобрали ссылки на проверенные ресурсы. И действительно, получилось очень объемное и крутое пособие!

Мы работали над ним несколько месяцев и вот наконец готовы представить его!

🔗 (тут была ссылка на роадмап, но он больше не доступен 🤷‍♀️)

Нам очень волнительно, ведь это первый наш полноценный продукт, и надеемся, что он будет полезен 🙏
5
А вы знали, что какое-то время назад в CSS появилась функциональность для каскадных слоев?

Все мы знаем принцип каскада в CSS. Но вот в CSS добавили новый механизм для работы с ним, основанный на каскадных слоях. Такие слои в теории могут помочь в управлении порядком применения стилей. Вы можете объявлять стили в одном или нескольких слоях, и они будут применяться в зависимости от порядка этих слоев.

При этом стили вне слоев все еще будут в приоритете над остальными. На картинке представлен небольшой пример, как это работает.

С одной стороны, такая возможность звучит многообещающе. Но лично я пока не вижу, как ее можно использовать в текущих проектах, разве что для переопределения стилей из импортируемых библиотек, примерно вот так:


@import url("https://cdn.com/bootstrap.min.css") layer;

@layer {
.fs-1 {
font-size: 3rem;
}
}


Да, это отличная возможность избавиться от !important, правда если ваш проект не настроен так, что стили из библиотек подкладываются в общий style.css вместе со стилями проекта при сборке. Из-за того, что стили вне слоя всегда будут в приоритете, переопределение через слои не будет работать. Тогда получается, что нужно либо весь проект переводить на использование слоев, или же не использовать их.

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

Подробнее про каскадные слои можно почитать в статье на Doka.
Всем привет! На связи снова Настя)

Как вы знаете, этот канал являлся частью проекта Codeca Frontend. Мы втроем с Машей и Олей делали образовательный и развлекательный контент про программирование, не только здесь, в телеграм, но и на других площадках.

Однако, все в мире меняется, и наш тандем не стал исключением. Теперь каждая из нас уходит в свободное плавание (хотя какие-то совместные проекты все же планируются).

Этот канал переходит в мои заботливые лапки руки, так что в ближайшее время его ждёт ребрендинг. Но суть не поменяется - здесь по-прежнему будут выходить посты про фронтенд. Однако, я планирую добавлять больше историй из моей рабочей практики, и собственные рассуждения на IT-темы.

Кроме этого, у меня остается тикток с мемасами.

Машу и Олю вы можете найти на других площадках:
- ютуб-канал Маши
- телеграм-канал Маши
- ютуб-канал Оли
- инстаграм Оли

Это было непростое решение, хоть у нас и пока что не слишком большая аудитория, но, тем не менее, нам важна ваша поддержка и понимание 🙏

Вот такие вот предновогодние новости 🙊
6
Channel name was changed to «Настя Котова (ex. Codeca Frontend)»
Я уже давно работаю во фронтенде, но все равно периодически забываю о том, что в JavaScript появляются новые удобные инструменты. Так, я заметила, что упускаю из виду Map и Set.

Для тех, кто так же, как и я, забывает про них, напомню:

- Map похож на обычный объект, с той разницей, что в качестве ключа в нем можно использоваться вообще любой тип, в том числе функцию или объект
- а Set позволяет хранить множество уникальных значений, то есть сколько бы раз вы не выполнили set.add() с одним и тем же значением, фактически оно будет добавлено только один раз

У обоих сущностей есть метод has(), который позволяет проверять наличие ключа (в случае Map) или значения (в случае Set).

Если мы хотим добавить элемент, когда его нет, или удалить, когда он есть, то вот как можно было бы написать это в обычном массиве:


const index = allValues.indexOf(currentValue);

if (index === -1) {
allValues.push(currentValue);
} else {
allValues.splice(index, 1);
}


А вот как в Set:


if (allValues.has(currentValue)) {
allValues.add(currentValue);
} else {
allValues.delete(currentValue);
}


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

Все это наводит меня на мысль, что, хоть в разработке и важно следить за обновлениями, но не зазорно упускать какие-то моменты. Главное - хотя бы постфактум замечать и использовать это.
🔥3
Нет ничего утомительнее, чем делать задачи, где нужно по 100 раз перезапускать одно и то же. Например, когда настраиваешь CI в проекте. Сделал правку → залил → ждешь пока CI раскочегарится и выдаст тебе очередную ошибку, которую ты пойдешь исправлять.

Или вот, недавно переходила на проекте с npm на pnpm. И опять - что-то исправляешь → ждешь пока все модули переустановятся → смотришь, что не работает → исправляешь дальше.

Пока сидела и ждала, подумала, а почему вообще pnpm? Основной аргумент перехода - это лучше npm-а, но стало интересно, а чем же. Пошла искать и собрала для вас небольшую статью, которую можно почитать на досуге.

Кстати, в этой статье я вообще никак не затронула тему работы с peer dependencies, а этому в документации pnpm посвящена отдельная страница. Так что дайте знать, если вам будет интересно, и я подготовлю отдельный материал (заодно и сама разберусь получше 🙃).
👍2
Что такое роадмап фронтендера?

Когда мы только задумали этот проект, то конечно же пошли смотреть, а что уже существует в интернете. Мы нашли несколько роадмапов для начинающих фронтендеров. Там были перечислены технологии, которые нужно освоить (такие как HTML, CSS и JavaScript), и основные темы внутри них.

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

И конечно, наша гордость - разделы с практическими заданиями. Это и отдельные элементы интерфейса, и темы для целых проектов, со ссылками на подходящие макеты и моковые API для подключения.

Роадмап можно приобрести только до 31 января. За небольшую стоимость вы получите огромное количество информации и кучу полезных ссылок!)

🔗 (тут была ссылка на роадмап, но он больше не доступен 🤷‍♀️)

(А еще это отличный подарок на Новый год фронтендеру или тому, кто собирается им стать))
Channel name was changed to «Настя Котова, фронтендер с лапками»
Обо мне

Привет всем новеньким и стареньким в этом канале! Сегодня хочу познакомиться поближе)

Меня зовут Настя, я занимаюсь коммерческой разработкой больше 7 лет - в декабре 2017-го устроилась на свою первую работу и закрутилось… Последние 3 года я работаю в Яндексе над внутренними продуктами, но не только.

Я фанат бэкенда, недаром начинала свою карьеру как фуллстек на php (все мы там были, друзья). Поэтому иногда поглядываю на Node.js и всякие инфраструктурные истории, CI/CD, базы данных и прочее, а сейчас на досуге изучаю Kotlin 🙊

Кроме этого, я люблю качественные UI и UX. Не могу назвать себя задротом по скруглениям кнопочек и не думаю, что мой глаз заточен на поиск смещения в 2 пикселя. Но уверена, что удобство интерфейсов - это важно. Наличие лоадеров/скелетонов и сообщений об ошибках как база, и плавные анимации там, где они к месту, как приятное дополнение 💅

Ещё я люблю публичные выступления (да-да, такие люди существуют!). Я выступала на внутренних мероприятиях в Яндексе, один доклад на Podlodka Crew тоже был. А в планах на 2025 год начать свой путь как спикера на митапах и конференциях.

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

Ну а в остальном, я - очередной формошлёп и кнопокрасильщик 🤡
Добро пожаловать, и надеюсь, мы подружимся)

Tiktok | Twitter(X)
👍9🔥81
Настя Котова // Frontend & Node.js
Я уже давно работаю во фронтенде, но все равно периодически забываю о том, что в JavaScript появляются новые удобные инструменты. Так, я заметила, что упускаю из виду Map и Set. Для тех, кто так же, как и я, забывает про них, напомню: - Map похож на обычный…
В продолжении темы про непопулярные структуры данных в JavaScript, такие как Map и Set.
Я решила вспомнить, в чем особенность WeakMap и WeakSet, и вот краткая памятка.

WeakMap
- Хранит пары ключ-значение, где ключи — только объекты.
- Ключи "слабые": если на объект-ключ больше нет ссылок, он удаляется сборщиком мусора.
- Нет методов для итерации.

WeakSet
- Хранит только объекты, каждое из которых уникально.
- Объекты "слабые": они удаляются, если нет других ссылок на них.
- Не поддерживает итерацию и не имеет свойства размера.

Такие структуры данных можно использовать, например, для кэширования (WeakMap) или хранения информации вида “да/нет” (WeakSet).
👍2
Полезности пост: оказывается, в CSS есть функция attr, которая помогает получать значение любого атрибута, и использовать его в CSS.

“Так это же полностью убирает необходимость явного использования inline-стилей!”, - подумала сначала я, пока не увидела поддержку этой функции в браузерах. По факту, её сейчас можно использовать только для CSS-свойства content и только как строку. То есть, вытащить значение вы можете из любого атрибута HTML-элемента (даже data-атрибута), а вот использовать - в очень ограниченном виде.

Как всегда в CSS - находишь что-то классное, но использовать пока что не можешь. 🥲

Подробнее можно почитать на Doka (где я про него и узнала)
На выходных сидела игралась с peer deps в pnpm, чтобы написать 2 часть, как и обещала, и неожиданно увидела, что мне установился React 19. Пошла почитать бложик, и оказалось, что в декабре 2024 года они наконец выпустили стабильный релиз. (Чуть не пропустила такую новость)

Ну что же, добро пожаловать в новую эру!

В связи с этим предлагаю стряхнуть пыль со старых постов в этом канале, где мы немного рассматривали самые интересные фичи:
- Обзор новинок React 19
- Новые хуки React 19 с примерами:
- Часть 1
- Часть 2
- Server Components и Server Actions:
- Часть 1
- Часть 2

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

Скажу немного про себя. На наших рабочих проектах мы нескоро пойдем обновляться, как минимум потому, что потребуется обновить и Next.js.

Есть один проект, который сейчас не использует его, а имеет кастомную сборку на Webpack, и у нас в планах как раз лежит задача обновления React там с 17 версии. Лично мне пока не хочется прыгать на 19, тем более, что в проекте много легаси, в том числе и классовых компонентов. Хотя на сайте React уверяют, что все еще не прекращают их поддержку.

Как в жизни, не люблю рисковать, так и в работе, когда вижу установку версии x.0.0, невольно начинаю думать про нерешенные баги, на которые можно наткнуться, и хочется немного подождать. Но повод подумать все же есть.

P.S. После того, как написала этот пост, пошла смотреть, и увидела, что на проекте сейчас стоит [email protected]. Эти люди были явно смелее, чем я, так что, может быть, тоже не бояться?)
1