Инструмент работает все максимально просто: сами комментарии подключаются по системе plug&play, а настроить их можно прямо на веб-сайте проекта
Replyke предоставляет готовый к использованию компонент комментариев, который легко настраивается и интегрируется с существующими React-проектами
https://replyke.com/
#React #web
@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2❤1
8 советов, которые сделают JavaScript-код чище
Прежде чем перейти к теме, выясним, что такое чистый код.
ЧИСТЫЙ КОД — это концепция в разработке программного обеспечения, подчеркивающая важность написания кода, который легко понять, поддерживать и тестировать. она включает в себя такие принципы, как читабельность, простота, избегание избыточности, осмысленное именование, единственная ответственность функций или методов, эффективная обработка ошибок, четкая коммуникация через код и тестируемость.
ЦЕЛЬ ЧИСТОГО КОДА — сделать исходный код понятным как для нынешних, так и для будущих разработчиков, что способствует сотрудничеству и облегчает постоянное сопровождение и оптимизацию программного обеспечения. принципы чистого кода наиболее подробно изложены в книге роберта к. мартина “чистый код: руководство по гибкой разработке программного обеспечения”.
Если у вас много сложного кода и вы не работаете над его очисткой, вам будет очень сложно его поддерживать.
Вот 8 советов, которые сделают JavaScript-код более читабельным и чистым.
📌 Смотреть
Прежде чем перейти к теме, выясним, что такое чистый код.
ЧИСТЫЙ КОД — это концепция в разработке программного обеспечения, подчеркивающая важность написания кода, который легко понять, поддерживать и тестировать. она включает в себя такие принципы, как читабельность, простота, избегание избыточности, осмысленное именование, единственная ответственность функций или методов, эффективная обработка ошибок, четкая коммуникация через код и тестируемость.
ЦЕЛЬ ЧИСТОГО КОДА — сделать исходный код понятным как для нынешних, так и для будущих разработчиков, что способствует сотрудничеству и облегчает постоянное сопровождение и оптимизацию программного обеспечения. принципы чистого кода наиболее подробно изложены в книге роберта к. мартина “чистый код: руководство по гибкой разработке программного обеспечения”.
Если у вас много сложного кода и вы не работаете над его очисткой, вам будет очень сложно его поддерживать.
Вот 8 советов, которые сделают JavaScript-код более читабельным и чистым.
📌 Смотреть
❤13👍5🔥3🤨3
Разработка веб-дэшбордов с использованием 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
Продолжаем серию статей из 3 частей по визуализации данных с помощью React, Material UI, Tailwind CSS и Nivo.
В 1-й части мы создали каркас для веб-приложения, содержащий 3 отдельные страницы: Home, About и Insights.
В этой, 2-й части, будем использовать Tailwind CSS в качестве фреймворка для работы со стилями веб-приложения.
Предварительные условия
Если у вас еще нет каркаса веб-приложения, выполните шаги, указанные в 1-й части. Затем интегрируйте в проект Tailwind CSS.
Перед разработкой веб-приложения обычно создается руководство по проектированию.
Оно включает указания, касающиеся цветовых схем, типографики, интервалов и других стилистических компонентов.
По сути, такое руководство является планом проекта.
Задачи данного туториала будут сведены только к разработке цветовой схемы.
📌Читать
📌Часть 1
@react_tg
👍10❤2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 useLocation - #React TS хук, который предоставляет данные о геолокации в реальном времени, а также метрики курса движения и скорости. 🗺️📍
Используйте его для получения информации о близлежащих местах или для определения местоположения пользователей поблизости.
▪Демо
▪Код
@react_tg
Используйте его для получения информации о близлежащих местах или для определения местоположения пользователей поблизости.
▪Демо
▪Код
@react_tg
👍25🔥6❤3🤯3
https://www.youtube.com/watch?v=VlzPNfdNt_k&t=89s
@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Полное собеседование React разработчика 2024🧑🏻💻
https://www.tg-me.com/javascriptv - наш телеграм канал с огромным количеством полезного материала для Frontend разработчиков.
С 12 по 15 февраля пройдет Frontend Interview Fest — онлайн-фест тестовых собеседований для Junior Frontend Developer-ов. Будут интервью…
С 12 по 15 февраля пройдет Frontend Interview Fest — онлайн-фест тестовых собеседований для Junior Frontend Developer-ов. Будут интервью…
👍7🔥2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
🌐🚀 #React hook - UseNetwork
Информация о сети в реальном времени! 📡✨
Вы можете узнать скорость передачи данных, тип соединения и статус сети прямо в вашем приложении.
Отлично подходит для адаптации контента вашего приложения в зависимости от качества соединения пользователя! 📶💻
👉 Demo: https://grayscal.es/hooks/use-network
@react_tg
Информация о сети в реальном времени! 📡✨
Вы можете узнать скорость передачи данных, тип соединения и статус сети прямо в вашем приложении.
Отлично подходит для адаптации контента вашего приложения в зависимости от качества соединения пользователя! 📶💻
👉 Demo: https://grayscal.es/hooks/use-network
@react_tg
👍20❤5🔥2❤🔥1
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
Идеально подходит для создания интуитивно понятных функций пользовательского интерфейса, таких как всплывающая подсказка "Поделиться", подобно Medium. ✨
▪ Демо: http://grayscal.es/hooks/use-text-selection
▪Код: https://gist.github.com/KristofferEriksson/8acb9b3eb241507eb0f6232938bf4ec7
@react_tg
👍18❤4🔥3
💫 Огромный выбор инструментов для веб-разработки.
Автор классифицировал их на 30 категорий и представил несколько десятков сервисов в каждой категории.
Таким образом, можно найти решение практически для любой задачи.
Этот список включает в себя шрифты, иконки, палитры, стоковое аудио, шаблоны кода, инструменты для дизайна, JS-фреймворки и многое другое. Все это делает эту подборку незаменимой шпаргалкой для любого веб-разработчика.
👀 Смотреть
@react_tg
Автор классифицировал их на 30 категорий и представил несколько десятков сервисов в каждой категории.
Таким образом, можно найти решение практически для любой задачи.
Этот список включает в себя шрифты, иконки, палитры, стоковое аудио, шаблоны кода, инструменты для дизайна, JS-фреймворки и многое другое. Все это делает эту подборку незаменимой шпаргалкой для любого веб-разработчика.
👀 Смотреть
@react_tg
👍13❤2🔥2🤨1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤19🔥6
CopilotKit
Библиотека с открытым исходным кодом, которая позволяет очень просто интегрировать искусственный интеллект в приложение.
CopilotKit принимает на вход описание вашего приложения и передаст его в свою инфраструктуру React для создания:
- ИИ-чатботов в приложении
- Текстовые области с поддержкой ИИ
- RAG, вызов функций и интеграция
Библиотека имеет встроенную поддержку LangChain, LangGraph и LangServe. Вы можете использовать их для расширения возможностей движка.
Также в библиотеку встроены нативные UI/UX-компоненты, которые вы можете использовать в своих приложениях:
- CopilotChat
- CopilotSidebar
- CopilotPopup
- CopilotTextarea
Библиотека имеет открытый исходный код. Вы можете использовать ее самостоятельно. Вы можете использовать ее с любым LLM, включая GPT-4.
Этот проект занял второе место на HackerNews и ProductHunt. Он был трендом на GitHub.
Эта библиотека работает с любом приложении React, но команда работает над ее расширением.
🐱 GitHub
@react_tg
Библиотека с открытым исходным кодом, которая позволяет очень просто интегрировать искусственный интеллект в приложение.
CopilotKit принимает на вход описание вашего приложения и передаст его в свою инфраструктуру React для создания:
- ИИ-чатботов в приложении
- Текстовые области с поддержкой ИИ
- RAG, вызов функций и интеграция
Библиотека имеет встроенную поддержку LangChain, LangGraph и LangServe. Вы можете использовать их для расширения возможностей движка.
Также в библиотеку встроены нативные UI/UX-компоненты, которые вы можете использовать в своих приложениях:
- CopilotChat
- CopilotSidebar
- CopilotPopup
- CopilotTextarea
Библиотека имеет открытый исходный код. Вы можете использовать ее самостоятельно. Вы можете использовать ее с любым LLM, включая GPT-4.
Этот проект занял второе место на HackerNews и ProductHunt. Он был трендом на GitHub.
Эта библиотека работает с любом приложении React, но команда работает над ее расширением.
@react_tg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥2
Реализация React Query в веб-приложении
В этом уроке рассмотрим, как интегрировать React Query в базовое веб-приложение.
React Query — мощная библиотека для управления, кэширования и синхронизации состояния сервера в приложениях React. Мы создадим простое приложение, получающее данные из API с открытым исходным кодом, и используем Bootstrap для применения стилей.
Цели проекта
Создать веб-приложение для получения данных из нижеуказанного API с помощью React Query.
📌Читать
@react_tg
В этом уроке рассмотрим, как интегрировать React Query в базовое веб-приложение.
React Query — мощная библиотека для управления, кэширования и синхронизации состояния сервера в приложениях React. Мы создадим простое приложение, получающее данные из API с открытым исходным кодом, и используем Bootstrap для применения стилей.
Цели проекта
Создать веб-приложение для получения данных из нижеуказанного API с помощью React Query.
📌Читать
@react_tg
❤12👍4🥰2
Одно из ограничений 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
👍15❤4🔥2
На первой итерации решение может выглядеть как-то так:
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🔥4❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4❤1
Асинхронные операции, такие как получение данных из внешних 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
👍14❤3🥱3🔥1
Интерактивные элементы 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
👍8❤4🤔3🔥1
⁉️ Только начинаешь свой путь в IT, и для трудоустройства не хватает реального опыта работы?
Знакомая история? Тогда давай к нам! 🚀
PREAX — онлайн-стажировка для frontend-разработчиков.
Помогаем накопить реальный 💪 опыт, формируем кадровый резерв для работодателей и привлекаем лучших к коммерческим заказам.
ЧТО ВНУТРИ?
🔖 Пять больших проектов. Пополнишь портфолио крутыми кейсами.
🔖 Спринты и дедлайны. Научишься рассчитывать время и укладываться в сроки.
🔖 Работа с легаси. Исправишь ошибки, оптимизируешь код и сделаешь рефакторинг.
🔖 Пачка код-ревью. Поделишься опытом и увидишь, как сделать свой код еще лучше.
🔖 Поддержка сообщества. Сможешь задать вопрос и получить совет, если нужна помощь.
🔖 Новый стек технологий. Закрепишь на практике и расширишь стек технологий.
🔖 Гибкий график. Сможешь выстраивать нагрузку, легко совмещая её с работой или учебой.
В итоге получишь реальный опыт работы в команде!
Попробуй! 1-й спринт — 🆓 БЕСПЛАТНО!
Реклама, ООО «Преакс Плэтформ», ОГРН 1237700372755
Знакомая история? Тогда давай к нам! 🚀
PREAX — онлайн-стажировка для frontend-разработчиков.
Помогаем накопить реальный 💪 опыт, формируем кадровый резерв для работодателей и привлекаем лучших к коммерческим заказам.
ЧТО ВНУТРИ?
🔖 Пять больших проектов. Пополнишь портфолио крутыми кейсами.
🔖 Спринты и дедлайны. Научишься рассчитывать время и укладываться в сроки.
🔖 Работа с легаси. Исправишь ошибки, оптимизируешь код и сделаешь рефакторинг.
🔖 Пачка код-ревью. Поделишься опытом и увидишь, как сделать свой код еще лучше.
🔖 Поддержка сообщества. Сможешь задать вопрос и получить совет, если нужна помощь.
🔖 Новый стек технологий. Закрепишь на практике и расширишь стек технологий.
🔖 Гибкий график. Сможешь выстраивать нагрузку, легко совмещая её с работой или учебой.
В итоге получишь реальный опыт работы в команде!
Попробуй! 1-й спринт — 🆓 БЕСПЛАТНО!
Реклама, ООО «Преакс Плэтформ», ОГРН 1237700372755
❤2
Если в двух словах, то для надежного получения значения из поля ввода в
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👍8❤3🖕2🔥1