Telegram Web Link
🖥 Replyke — встраиваемые комментарии для React

Инструмент работает все максимально просто: сами комментарии подключаются по системе plug&play, а настроить их можно прямо на веб-сайте проекта

Replyke предоставляет готовый к использованию компонент комментариев, который легко настраивается и интегрируется с существующими React-проектами

https://replyke.com/

#React #web

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21
8 советов, которые сделают JavaScript-код чище

Прежде чем перейти к теме, выясним, что такое чистый код.

ЧИСТЫЙ КОД — это концепция в разработке программного обеспечения, подчеркивающая важность написания кода, который легко понять, поддерживать и тестировать. она включает в себя такие принципы, как читабельность, простота, избегание избыточности, осмысленное именование, единственная ответственность функций или методов, эффективная обработка ошибок, четкая коммуникация через код и тестируемость.


ЦЕЛЬ ЧИСТОГО КОДА — сделать исходный код понятным как для нынешних, так и для будущих разработчиков, что способствует сотрудничеству и облегчает постоянное сопровождение и оптимизацию программного обеспечения. принципы чистого кода наиболее подробно изложены в книге роберта к. мартина “чистый код: руководство по гибкой разработке программного обеспечения”.

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

Вот 8 советов, которые сделают JavaScript-код более читабельным и чистым.

📌 Смотреть
13👍5🔥3🤨3
🖥 Лучшие бесплатные курсы React 2024

Здесь мы собрали самые топовые бесплатные курсы по React. Целый кладезь знаний.

Читать

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172🔥1
Разработка веб-дэшбордов с использованием React, Material UI, Tailwind CSS и Nivo. Часть 2

Продолжаем серию статей из 3 частей по визуализации данных с помощью React, Material UI, Tailwind CSS и Nivo.

В 1-й части мы создали каркас для веб-приложения, содержащий 3 отдельные страницы: Home, About и Insights.

В этой, 2-й части, будем использовать Tailwind CSS в качестве фреймворка для работы со стилями веб-приложения.

Предварительные условия
Если у вас еще нет каркаса веб-приложения, выполните шаги, указанные в 1-й части. Затем интегрируйте в проект Tailwind CSS.

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

Задачи данного туториала будут сведены только к разработке цветовой схемы.

📌Читать
📌Часть 1

@react_tg
👍102🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 useLocation - #React TS хук, который предоставляет данные о геолокации в реальном времени, а также метрики курса движения и скорости. 🗺️📍

Используйте его для получения информации о близлежащих местах или для определения местоположения пользователей поблизости.

Демо
Код

@react_tg
👍25🔥63🤯3
This media is not supported in your browser
VIEW IN TELEGRAM
🌐🚀 #React hook - UseNetwork

Информация о сети в реальном времени! 📡

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

Отлично подходит для адаптации контента вашего приложения в зависимости от качества соединения пользователя! 📶💻

👉 Demo: https://grayscal.es/hooks/use-network

@react_tg
👍205🔥2❤‍🔥1
⚡️ Locofy.aiполезная утилита для конвертирования дизайна сайта в его код.

Вы можете переносить креативы из Figma/Adobe XD сразу в React, React Native, HTML-CSS, Next.js или Gatsby. Есть функция синхронизации кода с GitHub и Visual Studio.

@react_tg
👍152🔥2🤣2
This media is not supported in your browser
VIEW IN TELEGRAM
🚀Попробуйте TextSelection - #React TS хук, который отслеживает выделение текста пользователем и его положение на экране!

Идеально подходит для создания интуитивно понятных функций пользовательского интерфейса, таких как всплывающая подсказка "Поделиться", подобно Medium.

Демо: http://grayscal.es/hooks/use-text-selection

Код: https://gist.github.com/KristofferEriksson/8acb9b3eb241507eb0f6232938bf4ec7

@react_tg
👍184🔥3
💫 Огромный выбор инструментов для веб-разработки.

Автор классифицировал их на 30 категорий и представил несколько десятков сервисов в каждой категории.
Таким образом, можно найти решение практически для любой задачи.

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

👀 Смотреть

@react_tg
👍132🔥2🤨1
This media is not supported in your browser
VIEW IN TELEGRAM
💡Frontend совет

Для определения min-width и width в CSS достаточно одной функции max

➡️ Демо: здесь

#css #tip

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2019🔥6
CopilotKit

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

CopilotKit принимает на вход описание вашего приложения и передаст его в свою инфраструктуру React для создания:
- ИИ-чатботов в приложении
- Текстовые области с поддержкой ИИ
- RAG, вызов функций и интеграция

Библиотека имеет встроенную поддержку LangChain, LangGraph и LangServe. Вы можете использовать их для расширения возможностей движка.

Также в библиотеку встроены нативные UI/UX-компоненты, которые вы можете использовать в своих приложениях:
- CopilotChat
- CopilotSidebar
- CopilotPopup
- CopilotTextarea

Библиотека имеет открытый исходный код. Вы можете использовать ее самостоятельно. Вы можете использовать ее с любым LLM, включая GPT-4.

Этот проект занял второе место на HackerNews и ProductHunt. Он был трендом на GitHub.

Эта библиотека работает с любом приложении React, но команда работает над ее расширением.

🐱 GitHub

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥2
Реализация React Query в веб-приложении

В этом уроке рассмотрим, как интегрировать React Query в базовое веб-приложение.

React Query — мощная библиотека для управления, кэширования и синхронизации состояния сервера в приложениях React. Мы создадим простое приложение, получающее данные из API с открытым исходным кодом, и используем Bootstrap для применения стилей.

Цели проекта

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

📌Читать

@react_tg
12👍4🥰2
💡Как использовать forwardRef с generic компонентами

Одно из ограничений forwardRef в том, что он отключает выведение типа для generic компонентов. Например:

const Table = <T,>(
props: {
data: T[];
renderRow: (row: T) => React.ReactNode;
},
ref: React.ForwardedRef<HTMLTableElement>
) => {
/** --snip-- */
};

const ForwardReffedTable = React.forwardRef(Table);

<Table
data={["a", "b"]}
renderRow={(row) => { // Тип выводится: row: string
return <tr>{row}</tr>;
}}
/>;

<ForwardReffedTable
data={["a", "b"]}
renderRow={(row) => { // Тип не выводится: row: unknown
return <tr>{row}</tr>;
}}
/>;


Чтобы исправить выведение типа для generic компонентов, можно создать утилитарную функцию для вызова forwardRef с правильными типами:

function fixedForwardRef<T, P = {}>(
render: (props: P, ref: React.Ref<T>) => React.ReactNode
): (props: P & React.RefAttributes<T>) => React.ReactNode {
return React.forwardRef(render) as any;
}

// Вызов forwardRef с правильным выведением типа:
const ForwardReffedTable = fixedForwardRef(Table);

🔗 Подробнее

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍154🔥2
💻 Проверь свои скиллы — задача по написанию hook для загрузки данных

На первой итерации решение может выглядеть как-то так:
function useFetch(url) {
const [data, setData] = useState(null);

useEffect(() => {
fetch(url)
.then((res) => res.json())
.then((respData) => setData(respData));
}, []);

return data;
}

В этом коде не хватает зависимости. Если url изменится, то запроса данных не произойдет.

Дальше код может стать таким:
function useFetch(url) {
const [data, setData] = useState(null);

useEffect(() => {
setData(null); // не забыть сбросить данные перед загрузкой
fetch(url)
.then((res) => res.json())
.then((respData) => setData(respData));
}, [url]); // <-- не забыть зависимость

return data;
}

На этом этапе можно остановиться, и подумать, как улучшить этот hook.

Пропустим ещё несколько итераций, и финальный код, который можно считать неплохим решением, выглядит так:
function useFetch(url) {
const [data, setData] = useState(null);
const [isClick Me Load More, setIsClick Me Load More] = useState(false);
const [error, setError] = useState(null);

useEffect(() => {
// флаг отмены
let cancelled = false;

setIsClick Me Load More(true);
setData(null);
setError(null);
fetch(url)
.then((res) => res.json())
.then((respData) => {
if (!cancelled) setData(respData);
})
.catch((e) => {
if (!cancelled) setError(e);
})
.finally(() => {
if (!cancelled) setIsClick Me Load More(false);
});

return () => {
// выставим признак того, что запрос отменен
cancelled = true;
};
}, [url]);

return [data, isClick Me Load More, error];
}


Эта задачка позволяет проверить понимание устройства рендеринга React, как устроено хранение состояния, когда происходят перерисовки, как заставить компонент перерисоваться в ответ на асинхронное событие, как устроена "очистка (cleanup) эффекта", как работают сайд-эффекты.

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥43
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ ReactRover позволяет развертывать React-приложения одним щелчком мыши

Особенности:
🔵Поддержка Vite и CRA
🔵Функциональность пользовательского имени сайта
🔵Поддержка переменных окружения
🔵Ведение журналов в реальном времени
🔵Аутентификация пользователей

🖥 GitHub

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥41
💡Обрабатывай асинхронные ошибки как профи

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

🔵Try-Catch с Async/Await
— надежное решение для обработки ошибок в асинхронном коде. Инкапсулируя асинхронные операции внутри try блока, разработчики получают возможность корректно перехватывать и обрабатывать ошибки, которые могут возникнуть во время выполнения.
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching data:', error);
throw error; // Re-throw the error to propagate it further
}
}

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

🔵Promise.catch()
Promise.catch() метод служит надежным защитником от асинхронных ошибок, предлагая краткое решение для обработки отклонений. Добавляя предложение .catch() в нашу цепочку обещаний, разработчики могут перехватывать и обрабатывать ошибки, возникающие во время выполнения асинхронных операций.
fetch('https://api.example.com/data')
.then((response) => response.json())
.then((data) => {
// Process the data
})
.catch((error) => {
console.error('Error fetching data:', error);
// Display a user-friendly error message
alert('An error occurred while fetching data.');
});

здесь .catch() перехватывает любые ошибки, возникающие во время обработки данных, позволяя разработчикам регистрировать ошибки в целях отладки и предоставлять пользователям понятное сообщение.

В общем, обработка ошибок, особенно асинхронных, в приложениях React требует многогранного подхода.
🔤А какой вариант обработки ошибок близок именно вам? Было бы интересно услышать

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🥱3🔥1
🖥 Обработка имён классов в React 🖥

Интерактивные элементы UI имеют более одного состояния отображения. Например, модальное окно может быть открыто или закрыто, а переключатель — включён или выключен. Обычно эти состояния меняют с помощью классов.

Работая напрямую с DOM, мы можем использовать classList, который содержит удобные методы для добавления и удаления классов. В React из коробки нет никаких удобств. Свойство className — это всего лишь строка, а строки неудобны для обработки:

class Button extends React.Component {
render () {
const { isPressed, isHovered, label } = this.props;
let btnClass = 'btn';
if (isPressed) {
// Приходится конкатенировать классы
btnClass += ' btn-pressed';
} else if (isHovered) {
btnClass += ' btn-over';
}
return <button className={btnClass}>{label}</button>;
}
};


Для решения этой задачи создатели React рекомендуют использовать пакет 'classnames'. Принцип его работы прост. Вместо манипулирования строчкой напрямую, мы формируем правильный объект, который уже будет преобразован в строку:
import cn from 'classnames';

class Button extends React.Component {
render () {
const { isPressed, isHovered, label } = this.props;
// Значение — это `true` или `false`
// При значении `true` класс включен, при `false` — выключен
// `'btn'` — это класс, который будет подставлен в любом случае
const btnClass = cn('btn', {
'btn-pressed': isPressed,
'btn-over': !isPressed && isHovered,
});
return <button className={btnClass}>{label}</button>;
}
};


Подставим конкретные значения:
const btnClass = cn('btn', {
'btn-pressed': false,
'btn-over': true,
});

console.log(btnClass); // 'btn btn-over'


Функция cn() принимает на вход любое количество аргументов. Если аргумент имеет строковой тип, то он считается обязательным классом. Если это объект, тогда работает логика, описанная выше:
const btnClass = cn('btn', 'another-class', {
'btn-pressed': isPressed,
'btn-over': !isPressed && isHovered,
});


@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84🤔3🔥1
⁉️ Только начинаешь свой путь в IT, и для трудоустройства не хватает реального опыта работы?

Знакомая история? Тогда давай к нам! 🚀

PREAX — онлайн-стажировка для frontend-разработчиков.

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

ЧТО ВНУТРИ?

🔖 Пять больших проектов. Пополнишь портфолио крутыми кейсами.

🔖 Спринты и дедлайны. Научишься рассчитывать время и укладываться в сроки.

🔖 Работа с легаси. Исправишь ошибки, оптимизируешь код и сделаешь рефакторинг.

🔖 Пачка код-ревью. Поделишься опытом и увидишь, как сделать свой код еще лучше.

🔖 Поддержка сообщества. Сможешь задать вопрос и получить совет, если нужна помощь.

🔖 Новый стек технологий. Закрепишь на практике и расширишь стек технологий.

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

В итоге получишь реальный опыт работы в команде!

Попробуй! 1-й спринт — 🆓 БЕСПЛАТНО!

Реклама, ООО «Преакс Плэтформ», ОГРН 1237700372755
2
🖥 Решение проблемы с получением значения поля в ReactJS

Если в двух словах, то для надежного получения значения из поля ввода в React используйте управляемые компоненты. Привяжите значение поля к состоянию с помощью атрибута value и обновляйте его при помощи обработчика события onChange. Принцип работы приведен ниже:
class InputComponent extends React.Component {
state = { value: '' };

handleValueChange = (event) => this.setState({ value: event.target.value });

render() {
// Заметьте взаимодействие состояния и поля ввода — вот так все и работает!
return <input value={this.state.value} onChange={this.handleValueChange} />;
}
}

В этом коде создается текстовое поле ввода, значение которого привязано к состоянию компонента.

@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👎12👍83🖕2🔥1
2025/07/12 19:15:55
Back to Top
HTML Embed Code: