Meta официально объявила, что с 1 апреля 2025 года React переходит на подписку!
Теперь за использование библиотеки придётся платить $9.99/мес для разработчиков и $199/мес для компаний.
Основные изменения:
useMemo, useCallback, React.memo).Кряк платной версии
На GitHub слили react18-crack.js, который:
REACT_ENTERPRISE_EDITION=TRUEЧто делать без кряка?
#react
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17⚡4🤯2🦄2❤1👀1👾1
Закончили с шутками и возвращаемся к привычным постам 🤗
Знали ли вы, что в CSS можно задавать переменные с конкретным типом через
Теперь переменные могут быть не просто строками, а, например, числами, цветами или процентами. Это позволяет браузеру правильно интерпретировать их и использовать без ошибок.
Как объявить типизированную переменную?
Допустим, мы хотим создать переменную для управления размером элемента.
Раньше:
Сейчас можно явно указать, что
Теперь
Пример использования
Что если задать неверное значение?
Если задать неверное значение, браузер просто проигнорирует его и оставит предыдущее корректное или начальное значение из
Поддержка браузерами: CanIUse
#css
Знали ли вы, что в CSS можно задавать переменные с конкретным типом через
@property?Теперь переменные могут быть не просто строками, а, например, числами, цветами или процентами. Это позволяет браузеру правильно интерпретировать их и использовать без ошибок.
Как объявить типизированную переменную?
Допустим, мы хотим создать переменную для управления размером элемента.
Раньше:
:root {
--size: 50;
}
Сейчас можно явно указать, что
--size — это число:
@property --size {
syntax: "<number>";
inherits: false;
initial-value: 10;
}
Теперь
--size можно безопасно использовать в calc, transform и других свойствах.Пример использования
@property --scale {
syntax: "<number>";
inherits: false;
initial-value: 1;
}
.box {
--scale: 1;
transform: scale(var(--scale));
transition: --scale 0.5s ease;
}
.box:hover {
--scale: 1.2;
}
Что если задать неверное значение?
Если задать неверное значение, браузер просто проигнорирует его и оставит предыдущее корректное или начальное значение из
@property.Поддержка браузерами: CanIUse
#css
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5
Сегодня поговорим о еще одном полезном утилити-типе в TypeScript —
Что такое
-
-
Проще говоря,
Пример использования
Предположим, у нас есть список цветов, и мы хотим связать каждый цвет с его HEX-кодом:
Что происходит:
- Мы определили тип
- Использовали
Теперь TypeScript гарантирует, что:
- Все ключи из
- Значения имеют тип
Используйте
#typescript
Record<Keys, Type>. Этот тип позволяет создавать объекты с определенными ключами и значениямиЧто такое
Record?Record<Keys, Type> — это утилита, которая создает объектный тип, где:-
Keys — набор ключей (обычно строковые литералы или объединение строк).-
Type — тип значений, которые будут связаны с этими ключами.Проще говоря,
Record позволяет задать фиксированный набор ключей и указать, какого типа должны быть их значения.Пример использования
Предположим, у нас есть список цветов, и мы хотим связать каждый цвет с его HEX-кодом:
type Colors = 'red' | 'green' | 'blue';
type ColorHex = Record<Colors, string>;
const colorCodes: ColorHex = {
red: '#FF0000',
green: '#00FF00',
blue: '#0000FF',
};
Что происходит:
- Мы определили тип
Colors, который является объединением строковых литералов ('red', 'green', 'blue').- Использовали
Record, чтобы создать объект, где каждому ключу из Colors соответствует строковое значение (HEX-код).Теперь TypeScript гарантирует, что:
- Все ключи из
Colors присутствуют в объекте.- Значения имеют тип
string.Используйте
Record, когда вам нужно описать объект с заранее известными ключами и типами значений.#typescript
👍9⚡2🔥1
Хочу попросить ваш фидбек — кажется, активность немного снизилась. Чего-то не хватает или может не заходит формат?
Поделитесь мыслями, я обязательно учту все комментарии (как минимум, запишу в свой блокнот)🤔
Поделитесь мыслями, я обязательно учту все комментарии (как минимум, запишу в свой блокнот)
Please open Telegram to view this post
VIEW IN TELEGRAM
Начинаем с поста о малоизвестном свойстве у input —
Что это за свойство?
Когда вы используете
Чтобы получить число, чаще всего используют
Но есть более нативный способ —
Что будет при некорректном вводе?
Если поле пустое или в нём невалидное значение,
Про работу с числами я писал в этом(тык) посте.
Когда стоит использовать:
- При работе с числовыми значениями из форм
- Чтобы избежать лишнего преобразования типов
- Для более чистого кода
#JavaScript
valueAsNumber. Оно позволяет работать с числами напрямую, без ручного преобразования типов.Что это за свойство?
Когда вы используете
<input type="number">, значение по умолчанию возвращается как строка:
const value = input.value;
console.log(typeof value); // "string"
Чтобы получить число, чаще всего используют
Number(value) или parseFloat(value).Но есть более нативный способ —
valueAsNumber:
const numberValue = input.valueAsNumber;
console.log(typeof numberValue); // "number"
Что будет при некорректном вводе?
Если поле пустое или в нём невалидное значение,
valueAsNumber вернёт NaN. Это нужно учитывать при работе с данными:
if (!Number.isNaN(numberValue)) {
// значение можно использовать
} else {
// обработка ошибки
}
Про работу с числами я писал в этом(тык) посте.
Когда стоит использовать:
- При работе с числовыми значениями из форм
- Чтобы избежать лишнего преобразования типов
- Для более чистого кода
#JavaScript
🔥12👍8❤3👏1👀1
Сегодня разбираем задачу с собеседования про цепочку промисов.
Промисы — это база для любого собеседования. На первый взгляд легко, но многие путаются из-за спешки или невнимательности.
Что выведет этот код в консоль?
Ответ:127
Объяснение:
1.
2.
3.
4.
5.
Важно:
#interview #JavaScript
Промисы — это база для любого собеседования. На первый взгляд легко, но многие путаются из-за спешки или невнимательности.
Что выведет этот код в консоль?
Promise.resolve(123)
.then((x) => x + 1)
.catch((x) => x + 2)
.then((x) => x + 3)
.then((x) => console.log(x));
Ответ:
Объяснение:
1.
Promise.resolve(123) — промис сразу выполняется со значением 123.2.
.then((x) => x + 1) — прибавляем 1 к 123.3.
.catch((x) => x + 2) — пропускается, так как ошибки не было.4.
.then((x) => x + 3) — прибавляем 3 к 124.5.
.then(console.log) — выводим в консоль 127.Важно:
catch срабатывает только при необработанной ошибке. В нашем случае ошибок нет, значит пропускаем.#interview #JavaScript
🔥10👍6⚡1
Использовали хук
Что за хук?
Пример использования
Например, у нас есть компонент с инпутом для поиска и большим списком элементов. Без оптимизации каждое изменение в инпуте будет вызывать перерисовку всего списка, что может замедлить интерфейс.
Как это работает?
1. Пользователь вводит текст в инпут.
2. Состояние
3. Компонент
— Инпут не зависает.
— Фильтрация списка происходит чуть позже, когда React "освободится".
Когда использовать?
— Если у вас есть большие списки или сложные вычисления , которые могут замедлить интерфейс.
— Если нужно отложить обновление части UI, чтобы не блокировать основной поток.
#react #BestPractices
useDeferredValue? Это хук, который помогает оптимизировать производительность, откладывая обновление менее важных частей интерфейса. Что за хук?
useDeferredValue — это хук из React 18, который позволяет "откладывать" обновление части интерфейса. Он принимает значение и возвращает его "отложенную" версию. Это значение обновляется только после того, как React завершит рендеринг более приоритетных задач.Пример использования
Например, у нас есть компонент с инпутом для поиска и большим списком элементов. Без оптимизации каждое изменение в инпуте будет вызывать перерисовку всего списка, что может замедлить интерфейс.
import { useState, useDeferredValue } from "react";
function App() {
const [query, setQuery] = useState("");
const deferredQuery = useDeferredValue(query);
return (
<div>
<input
type="text"
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Введите текст"
/>
<List query={deferredQuery} />
</div>
);
}
function List({ query }) {
const items = Array.from({ length: 1000 }, (_, i) => `Item ${i}`);
const filteredItems = items.filter((item) =>
item.toLowerCase().includes(query.toLowerCase())
);
return (
<ul>
{filteredItems.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
}
Как это работает?
1. Пользователь вводит текст в инпут.
2. Состояние
query обновляется сразу, но deferredQuery обновляется с задержкой.3. Компонент
List использует deferredQuery, чтобы отфильтровать элементы. Благодаря этому:— Инпут не зависает.
— Фильтрация списка происходит чуть позже, когда React "освободится".
Когда использовать?
— Если у вас есть большие списки или сложные вычисления , которые могут замедлить интерфейс.
— Если нужно отложить обновление части UI, чтобы не блокировать основной поток.
#react #BestPractices
👍6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Инструмент недели — CSS Loaders
Мы часто сталкиваемся с проблемой отображения состояния загрузки. На CSS Loaders собраны готовые анимации лоадеров и все они на чистом CSS
Посмотреть можно тут: css-loaders.com
#css
Мы часто сталкиваемся с проблемой отображения состояния загрузки. На CSS Loaders собраны готовые анимации лоадеров и все они на чистом CSS
Посмотреть можно тут: css-loaders.com
#css
🔥9👍6❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁8👍4
Привет 👋
Задача, снова задача) Через тренировки можно подготовиться к большинству собеседований.
Условие:
Нужно дописать функцию, которая принимает два параметра:
1. Массив чисел
2. Функцию-предикат, которая принимает значение элемента массива и возвращает
Нужно найти в массиве индекс элемента, для которого предикат вернет
Входные параметры:
Решение:
И все? Да, и все😅 Многие могут начать писать функции, в которых используют цикл
#interview #JavaScript
Задача, снова задача) Через тренировки можно подготовиться к большинству собеседований.
Условие:
Нужно дописать функцию, которая принимает два параметра:
1. Массив чисел
2. Функцию-предикат, которая принимает значение элемента массива и возвращает
true или false.Нужно найти в массиве индекс элемента, для которого предикат вернет
true. Если такого элемента нет, вернуть -1.Входные параметры:
findInArray([1, 3, 5, 6, 7], (value) => value % 2 === 0); // Должно вернуть 3
findInArray([1, 3, 5, 7], (value) => value % 2 === 0); // Должно вернуть -1
Решение:
const findInArray = (arr, predicate) => arr.findIndex(predicate);
И все? Да, и все
for, но в JS уже есть встроенные методы о которых нужно знать и использовать.#interview #JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥7
Сегодня база про cookie. Мы работаем с ними каждый день, и про них спрашивают почти на каждом собеседовании.
Что такое cookie?
Cookie — это строка с данными, которую браузер сохраняет и автоматически отправляет серверу при каждом HTTP-запросе.
Как устанавливаются куки?
Как еще можно установить?
Куки могут быть установлены сервером через HTTP-ответы с помощью заголовка
Свойства:
1.
2.
3.
4.
5.
6.
Удаление cookies:
Можно удалить куку, установив её с датой, которая уже прошла, или задать значение
Особенности:
1. Максимальный размер не должен превышать 4 KB.
2. Куки отправляются на каждый запрос.
#JavaScript
Что такое cookie?
Cookie — это строка с данными, которую браузер сохраняет и автоматически отправляет серверу при каждом HTTP-запросе.
Как устанавливаются куки?
document.cookie = "token=abc123; path=/; max-age=3600";
Как еще можно установить?
Куки могут быть установлены сервером через HTTP-ответы с помощью заголовка
Set-Cookie. Когда сервер хочет установить куку на клиенте, он отправляет этот заголовок в ответе на запрос.Свойства:
1.
path: Определяет путь, для которого кука будет доступна. По умолчанию: / — доступна на всем сайте.2.
expires: Устанавливает дату истечения срока действия куки. По умолчанию: кука сессионная и удаляется при закрытии браузера.3.
max-age: Устанавливает время жизни куки в секундах. По умолчанию: не указан, кука сессионная.4.
secure: Указывает, что кука будет передаваться только по HTTPS. По умолчанию: не установлен, кука будет передаваться как по HTTP, так и по HTTPS.5.
samesite: Определяет, можно ли отправлять куку с запросами на другие сайты. По умолчанию: не указан, кука отправляется с запросами как с того же сайта, так и с внешних источников.6.
httpOnly: Указывает, что кука будет доступна только для сервера и не может быть прочитана через JavaScript. Это улучшает безопасность, предотвращая атаки. По умолчанию: не установлен.Удаление cookies:
Можно удалить куку, установив её с датой, которая уже прошла, или задать значение
max-age равным 0 или отрицательным числом.Особенности:
1. Максимальный размер не должен превышать 4 KB.
2. Куки отправляются на каждый запрос.
#JavaScript
👍12🔥3❤2
Один из моих любимых утилити-типов в TypeScript —
Что делает ReturnType?
Пример:
Теперь
Где применять?
У меня есть идеальный кейс на одном из проектов: компонент, который завязан на данные из хука. Тут идеально подходит
Что-то на подобии такого:
Конечно, мы можем создать отдельный тип и использовать его и в хукe, и в компоненте, но тогда при изменениях придётся править в нескольких местах.
Это не единственное применение
#typescript
ReturnType. Сегодня пост о нём.Что делает ReturnType?
ReturnType<T> — извлекает тип возвращаемого значения из функции T.Пример:
function getUser() {
return { id: 1, name: 'Василий' };
}
type User = ReturnType<typeof getUser>;
// { id: number, name: string }
Теперь
User всегда будет соответствовать тому, что возвращает getUser. Где применять?
У меня есть идеальный кейс на одном из проектов: компонент, который завязан на данные из хука. Тут идеально подходит
ReturnType — можно получить тип возвращаемого значения хука и использовать его в пропсах компонента.Что-то на подобии такого:
// Какой-то хук с логикой
function useUserData() {}
// Пропсы компонента
interface Props {
data: ReturnType<typeof useUserData>;
};
function UserInfo({ data }: Props) {}
Конечно, мы можем создать отдельный тип и использовать его и в хукe, и в компоненте, но тогда при изменениях придётся править в нескольких местах.
interface User {}
function useUserData(): User {}
interface Props {
data: User;
};
function UserInfo({ data }: Props) {}
Это не единственное применение
ReturnType. Главное знать о его существовании и сами найдете применение в своем проекте)#typescript
🔥7👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14 8