Senior Frontend - javascript, html, css
25.7K subscribers
1.27K photos
2.25K videos
690 links
Senior Front - канал для frontend программистов, практические задачки, проверки знаний, интересные статьи

Админ, сотрудничество, реклама:@seniorFrontPromo, @maria_seniorfront
Канал в реестре РКН https://rknn.link/bsU
Download Telegram
Как использовать useEffect ?

Это хук, введённый в React 16.8, который позволяет выполнять побочные эффекты в функциональных компонентах. Побочные эффекты включают в себя операции, которые выходят за рамки возвращаемого результатом рендеринга, такие как работа с сетью (запросы к API), подписки, изменение документа и так далее. Он заменяет собой жизненные циклы классовых компонентов, такие как componentDidMount, componentDidUpdate и componentWillUnmount.

Синтаксис:
useEffect(() => {
// Ваш код для побочного эффекта
return () => {
// Очистка (необязательно)
};
}, [зависимости]);

Функция побочного эффекта: Это его основное тело, где вы помещаете код, который должен выполняться после каждого рендеринга (по умолчанию) или когда изменяются определённые зависимости.
Очистка: Функция очистки выполняется перед тем, как компонент будет удалён, а также перед следующим выполнением эффекта. Это идеальное место для отмены подписок, таймеров и других ресурсов, чтобы избежать утечек памяти.
Массив зависимостей: Определяет, при изменении каких значений должен повторно выполняться эффект. Если массив пуст ([]), эффект выполнится один раз после первого рендеринга. Если массив не указан, эффект будет выполняться после каждого рендеринга.

Примеры использования:

Запуск эффекта один раз
Чтобы выполнить эффект один раз после первого рендеринга (аналог componentDidMount в классовых компонентах), используйте пустой массив зависимостей:
useEffect(() => {
// Код здесь будет выполнен один раз после инициализации компонента
}, []);


Выполнение при изменении зависимостей
Чтобы выполнить эффект при изменении определённых значений:
const [count, setCount] = useState(0);

useEffect(() => {
// Код здесь будет выполнен каждый раз, когда изменяется значение count
document.title = Вы нажали ${count} раз;
}, [count]); // Зависимости


Очистка эффекта
Пример использования функции очистки:
useEffect(() => {
const timerID = setInterval(() => {
// Ваша логика здесь
}, 1000);

return () => {
clearInterval(timerID); // Очистка при размонтировании компонента
};
}, []); // Эффект выполнится один раз


👉 @seniorFront
👍93
This media is not supported in your browser
VIEW IN TELEGRAM
Rotating text, falling letters

В JS создана логика запуска CSS трансформаций для каждой буквы слова.

👉 @seniorFront
🔥6
Вот вам вопросы для прокрастинации

Вопросы разные, все они присланы пользователями.

Если бы 8-битного бога спросили, какое самое большое число, что он ответил?
255

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

Согласно легенде ОН — глаз небесного белого орла, который после битвы с черным колдуном упал на Землю и стал камнем. Другой ОН стоил около 4000 рублей и для многих стал первым проводником в мир программирования.
Агат

Что появилось раньше, print(), или 'Hello world!' как фраза, с которой сталкивался каждый программист?
print(), т.к. без него не было бы и 'Hello world!'

В чём отличие геймера от тестировщика игр?
Один тратит деньги, а другой зарабатывает. Зачёт по смыслу.

Одна из татуировок иронично символизирует разделение одного с другим и одновременно неотделимость одного от другого. В коде и одно, и другое так же часто неотделимы. Назовите одно и другое на любом языке.
</head> <body> Зачёт по смыслу.

На одной забавной картинке в интернете собрались вместе театр, лиса, лев, старый грязный унитаз и ЦВЕТ, который есть в лисе, во льве и в театре. Какое слово автор заменил словом «ЦВЕТ»?
Хром (Chrome)

Если камень — это 0, бумага — это 31 а ножницы — 6, то какими числами сказать «отлично», «наберу»?
1, 17. В кулаке согнутые пальцы нули, а выпрямленные единицы рассматриваем как двоичную систему счисления

Нельзя сказать, чтобы их подбрасывало в 6 раз сильнее на таких же по высоте кочках. Но сидеть им было явно неудобно и фактически они стояли при езде. Так что пришлось всё же сделать для них нечто, чтобы их не выбросило вовсе. А что именно сделали для них?
«Ремни безопасности». Их установили на четырёхколёсных транспортных планетоходах для передвижения людей по поверхности Луны.

МРТ, рентген, «дышите‑не‑дышите», простукивание. Подумайте о том, что был же тот, кто первый начал стучать и — назовите тару.
Бочка. В 1761 году в Вене вышла книга молодого врача Ауенбруннера, посвященная распознаванию болезней. Она начиналась словами благодарности отцу врача, потомственному пивовару, за оригинальную идею — выстукивание грудной клетки пациента, по аналогии с выстукиванием пивных бочек. Вот так проверка пивных бочек привела к врачебному способу исследования.

Еще больше вопросов в статье

👉 @seniorFront
👍32👎2🤔1
14 инструментов для генерации изображений с кодом

В этой статье мы рассмотрим 14 крутых инструментов, которые помогают превращать код в красивые картинки. Каждый из них имеет свои фишки и подойдёт для разных задач. Кто-то любит минимализм, кому-то важна возможность кастомизации, а кто-то вообще хочет делать анимации с кодом — для всех найдётся свой вариант. Эта подборка точно поможет вам найти инструмент, который сделает ваши фрагменты кода не только понятными, но и визуально привлекательными.

👉 @seniorFront
🔥5👍1
This media is not supported in your browser
VIEW IN TELEGRAM
range slider hamster

В зависимости от выбранной скорости запускаются различные CSS анимации.

👉 @seniorFront
15👍2🔥1
Media is too big
VIEW IN TELEGRAM
Creative Banner Hover Effects

В этом видео создается эффект "проявления" картинки при наведении на CSS и JS.

👉 @seniorFront
5👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Shy Ghost

Создано и анимировано в HTML и SCSS. Логика запуска анимаций реализована в JS.

👉 @seniorFront
11🔥5👍2
This media is not supported in your browser
VIEW IN TELEGRAM
CSS Info Cards

Карточки, свёрстанные на HTML и SCSS.

👉 @seniorFront
👍81
Media is too big
VIEW IN TELEGRAM
Ghost Text

В этом видео создается эффект исчезновения текста при помощи CSS blur и transform при наведении.

👉 @seniorFront
👍2🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
action button with checkbox trick

Реализовано на HTML и Less, без использования JS.

👉 @seniorFront
👍6
1's, 0's and wildcards

Верните массив, содержащий все возможные значения, которые можно получить, заменяя '?' нулём или единицей.

Пример:
'101?' -> ['1010', '1011']
'1?1?' -> ['1010', '1110', '1011', '1111']


👉 @seniorFront
👍1
Как использовать менеджер состояний NgRx для Angular-проектов

Итак, начнем с определения. В контексте веб-разработки менеджер состояний NgRx — это инструмент, который управляет глобальным для всего приложения состоянием. Согласно документации, он является инструментом изоляции побочных эффектов для создания более чистой архитектуры компонентов. Также с введением NgRx появляются инструменты для разработки и отладки, расширяющие возможности создания различных типов приложений.

В этой статье разбираются особенности применения, плюсы и минусы NgRx.

👉 @seniorFront
Как работает браузер ?

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

Запрос ресурса:
Когда пользователь вводит URL в адресную строку и нажимает Enter, браузер начинает с определения адреса ресурса. Если это URL-адрес, начинающийся с http:// или https://, браузер отправляет запрос на сервер.
        GET /index.html HTTP/1.1
Host: example.com


DNS-разрешение:
Браузер преобразует доменное имя (например, example.com) в IP-адрес с помощью DNS-сервера.

Установка соединения:

Браузер устанавливает TCP-соединение с сервером, а если используется https, то устанавливает также SSL/TLS-соединение для безопасной передачи данных.

Отправка HTTP-запроса:
Браузер отправляет HTTP-запрос к серверу, чтобы получить содержимое веб-страницы.
        GET /index.html HTTP/1.1
Host: example.com


Получение HTTP-ответа:
Сервер отвечает с кодом состояния (например, 200 OK) и возвращает HTML-документ.
        HTTP/1.1 200 OK
Content-Type: text/html

<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>


Разбор (парсинг) HTML:
Браузер начинает разбор HTML-документа. Он создает DOM (Document Object Model) — иерархическую структуру узлов, представляющую содержимое страницы.
        <html>
<head>
<title>Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>


Обработка CSS:
Браузер обрабатывает CSS-стили. Он загружает CSS-файлы и применяет стили к соответствующим элементам DOM, создавая CSSOM (CSS Object Model).
       h1 {
color: blue;
}


Построение рендер-дерева:
DOM и CSSOM объединяются для создания рендер-дерева. Рендер-дерево представляет собой структуру, содержащую визуальные элементы, которые должны быть отображены на странице.

Визуализация (рендеринг):

Браузер вычисляет положение каждого элемента на экране (расчет компоновки) и рисует их (отрисовка).

Обработка JavaScript:
Браузер загружает и выполняет JavaScript-код. Если скрипт модифицирует DOM или CSSOM, процесс может повториться с повторным расчетом и перерисовкой.
document.querySelector('h1').textContent = 'Hello, JavaScript!';


Асинхронные операции:
Браузер обрабатывает асинхронные операции, такие как AJAX-запросы и таймеры, что может также вызвать повторное обновление страницы.

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

👉 @seniorFront
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
Noise Abstraction

Реализовано на canvas с использованием библиотеки simplex-noise.

👉 @seniorFront
🔥51
Performance review

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

1. Система закрыта для сотрудников. Вы не можете посмотреть результаты ревью ваших коллег, вы не можете влиять на итоговую оценку. Нередки ситуации, когда вы получаете большинство положительных отзывов от коллег, но достаточно одного негативного отзыва и руководитель принимает «объективное решение» снизить вам оценку. Иногда достаточно и просто мнения вашего руководителя, чтобы он снизил вам итоговую оценку независимо от положительных отзывов. PR только создаёт видимость коллективной оценки вашего труда, но по факту её результат формируется вашим руководителем, который вынужден преследовать собственный KPI, и у вас нет никаких способов влияния на это.

2. Не существует объективных способов оценки. Процесс, в котором вы рассказываете руководству, что вы сделали за отчётный период, парадоксален. Весь период руководство занималось какими-то своими делами, а теперь вам надо рассказать, что вы сделали ценного для компании. И основная проблема тут — показать видимый для руководства результат работы. Это значит, что ваш коллега, что написал новый сервис с нуля, находится в гораздо более выигрышной ситуации, чем ваши правки легаси сервисов, код которых поддерживается ещё с 1990-х годов. Даже в том случае, если они помогут сохранить бизнесу кучу денег на длинной дистанции. Можно, конечно, предположить, что ваше руководство объективно и достаточно в теме, чтобы понять сложность и необходимость вашей работы с легаси кодом и по достоинству вас оценить. Но тогда зачем такому руководству PR, если оно и так в курсе вашего вклада в общее дело?

3. PR занижает вашу рыночную стоимость. Вот вы хотите увеличить себе зарплату. Компания предлагает решение — для этого надо показать оценку выше средней на следующем PR. Если ваши рабочие задачи к этому располагают, то это может быть неплохим вариантом. Но получить оценку выше средней, как правило, тяжелее, чем оффер в другой компании на ту сумму, что вы хотите. Существуют и политики компании, что вам не могут повысить зарплату выше определённого порога, как, например, в «Озоне». В итоге, если вы выбираете путь PR, вы выполняете больше работы за меньшую оплату. Если вы верите в справедливость PR, то для компаний это очень эффективный инструмент снижения вашей стоимости, а значит, собственных издержек.

4. PR часто используют для обоснования сокращений. Поскольку процесс закрытый, вы вполне можете получать из года в год хорошие оценки, но внезапно получить плохую, потому что компании нужно провести сокращения. Нам известно о таких случаях в «Додо» и «Авито», например. Самое мерзкое в этом то, что компания может не признавать факт сокращений, а все увольнения будет оправдывать неэффективностью увольняемых.

👉 @seniorFront
Как сделать React Server Components в Electron с помощью Next.js и без открытых портов

С появлением React Server Components и Server Actions разработка веб-приложений стала проще, чем когда-либо. Удобно когда у разработчика есть все серверные API прямо внутри веб-приложения, нативно, с типами и полной поддержкой от фреймворка, например Next.js (и других фреймворков, поддерживающих RSC, конечно).

В то же время, Electron является де-факто стандартом для современных настольных приложений, написанных с использованием веб-технологий, особенно когда приложению нужен доступ к файловой системе и другим системным API, и девелопер знает только JS (Tauri заслуживает почётного упоминания, если вы знаете Rust или если вам нужен только простой WebView2 shell).

Я задался вопросом: почему бы не объединить лучшее из обоих миров и не запустить обычное приложение Next.js прямо внутри Electron, чтобы насладиться всеми преимуществами React Server Components?

👉 @seniorFront
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
3D Image Carousel

Карусель реализована на HTML и CSS, без использования JS.

👉 @seniorFront
🔥12👍2
Media is too big
VIEW IN TELEGRAM
Background Animation

В этом видео создается анимация при движении мыши на CSS и JS.

👉 @seniorFront
2
This media is not supported in your browser
VIEW IN TELEGRAM
Реакция разраба на дизайнера, который презентует концепт сайта с анимациями и эффектами

👉 @seniorFront
37🔥7