fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

React JS

React JS

رفتن به کانال در Telegram

React программирование @haarrp - admin @itchannels_telegram - 🔥лучшие ит-каналы @javascriptv - продвинутый javascript @programming_books_it - бесплатные it книги @ai_machinelearning_big_data - ml № 5037566384

نمایش بیشتر

📈 تحلیل کانال تلگرام React JS

کانال React JS (@react_tg) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 16 115 مشترک است و جایگاه 8 004 را در دسته فناوری و برنامه‌ها و رتبه 40 659 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 16 115 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 29 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -142 و در ۲۴ ساعت گذشته برابر -7 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 15.49% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 5.66% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 2 498 بازدید دریافت می‌کند. در اولین روز معمولاً 912 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 17 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند javascript, github, css, интерфейс, браузер تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
“React программирование @haarrp - admin @itchannels_telegram - 🔥лучшие ит-каналы @javascriptv - продвинутый javascript @programming_books_it - бесплатные it книги @ai_machinelearning_big_data - ml № 5037566384”

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 30 اکتبر, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

16 115
مشترکین
-724 ساعت
-497 روز
-14230 روز
آرشیو پست ها
React JS
16 112
🖥 Полезные советы по написанию чистого React кода ▶️Деструктурирование свойств — — это хороший способ сделать код чище и улу
🖥 Полезные советы по написанию чистого React кода ▶️Деструктурирование свойств — — это хороший способ сделать код чище и улучшить возможности по его поддержке. Дело в том, что это позволяет чётко выражать или объявлять то, что использует некая сущность. При этом такой подход не принуждает разработчиков вчитываться в реализацию компонента для того, чтобы выяснить состав свойств, связанных с ним.
// до рефакторинга
async function authenticate({ user_id, token }) {
  try {
    const response = await axios.post('https://someapi.com/v1/auth/', {
      user_id,
      token,
    })
    console.log(response)
    return response.data
  } catch (error) {
    console.error(error)
    throw error
  }
}

// после рефакторинга
async function authenticate({ user_id, jwt_token, token = jwt_token }) {
  try {
    const response = await axios.post('https://someapi.com/v1/auth/', {
      user_id,
      token,
    })
    console.log(response)
    return response.data
  } catch (error) {
    console.error(error)
    throw error
  }
}
Сущность jwt_token будет оцениваться в тот момент, когда код дойдёт до token. В результате, если jwt_token окажется действительным токеном, и сущность token окажется равной undefined, в token попадёт значение jwt_token. Если же в token уже было какое-то значение, не являющееся по правилам JS ложным (то есть — некий реальный токен), то в token просто останется то, что там уже было. ▶️Размещайте файлы компонентов в продуманной структуре папок Например, эта структура может выглядеть наподобие
- src
    - components
- Breadcrumb
    - index.js
    - Breadcrumb.js
    - CollapsedSeparator.js
- Input
    - index.js
    - Input.js
    - utils.js
    - focusManager.js
- Card
    - index.js
    - Card.js
    - CardDivider.js
- Button.js
- Typography.js
📎 Читать подробнее @react_tg

React JS
16 112
🔥 Кто сказал, что React ограничивается вебом? 13 марта в 18:00 (GMT+3) Social Discovery Group приглашает на бесплатный вебин
🔥 Кто сказал, что React ограничивается вебом? 13 марта в 18:00 (GMT+3) Social Discovery Group приглашает на бесплатный вебинар "Optimizing React: Web & Beyond"! Узнаем, как React применяют в 3D графике, монтаже видео и создании ботов. А еще обещаем интересные разговоры о Server-Side Rendering и оптимизированных методах сборки компонентов. Social Discovery Group формирует будущее в индустрии онлайн-знакомств, с портфелем из более чем 70 брендов и 500+ миллионами пользователей по всему миру! Наша команда отлично разбирается в трудностях масштабирования приложений для такой огромной аудитории, сохраняя при этом их высокую производительность. 📝 Регистрация уже открыта: https://bit.ly/4abgoVP

React JS
16 112
🖥 Создание приложения React-Electron с нуля Прежде чем начать, убедитесь, у вас стоят: 1. Node.js (версия 12 или новее) 2. npm или yarn 1️⃣шаг: настройка структуры проекта Создайте новую директорию для вашего проекта и перейдите к ней в вашем терминале:
mkdir react-electron-app
cd react-electron-app
mkdir -p src electron public
touch src/App.tsx src/index.tsx electron/main.ts
touch public/index.html
Теперь ваш проект должен иметь следующую структуру:
react-electron-app
├── electron
│   └── main.ts
├── public
│   └── index.html
└── src
    ├── App.tsx
    └── index.tsx
2️⃣шаг: выполните следующую команду в терминале, чтобы инициализировать проект с файлом package.json:
npm init -y
3️⃣шаг: установите необходимые зависимости для проекта:
npm install --save react react-dom typescript electron
npm install --save-dev concurrently electron-builder electron-is-dev wait-on cross-env
4️⃣шаг: настройка Typerscript Создайте файл tsconfig.json в корне проекта:
touch tsconfig.json
Добавьте следующее содержимое в файл tsconfig.json:
{
  "compilerOptions": {
    "target": "ES2023",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": ["src"]
}
5️⃣шаг: настройка приложения React Замените содержимое файла src/App.tsx следующим кодом:
function App() {
  return (
    <div className='App'>
      <p>
        Привет, мир!
      </p>
    </div>
  );
}

export default App;
Замените содержимое файла src/index.tsx следующим кодом:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);
Замените содержимое файла public/index.html следующим кодом:
<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Приложение React-Electron</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>
6️⃣шаг: настройка основного процесса Electron Замените содержимое файла electron/main.ts следующим кодом:
import { app, BrowserWindow } from 'electron';
import * as path from 'path';
import * as isDev from 'electron-is-dev';

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true,
    },
  });

  win.loadURL(
    isDev
      ? 'http://localhost:3000'
      : `file://${path.join(__dirname, '../build/index.html')}`
  );

  win.webContents.openDevTools();
}

app.whenReady().then(createWindow);

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow();
  }
});
7️⃣шаг: настройка скриптов в package.json Откройте файл package.json и добавьте следующие скрипты в раздел “scripts”:
"scripts": {
  "start": "react-scripts start",
  "build": "react-scripts build",
  "eject": "react-scripts eject",
  "electron:dev": "concurrently \"cross-env BROWSER=none yarn start\" \"wait-on http://127.0.0.1:3000 && tsc -p electron -w\" \"wait-on http://127.0.0.1:3000 && tsc -p electron && electron .\"",
  "electron:build": "yarn build && tsc -p electron && electron-builder",
  "electron:dist": "yarn build && tsc -p electron && electron-builder --mac --dir"
}
8️⃣шаг: Теперь вы можете запустить свое приложение React-Electron, выполнив следующую команду:
npm run electron:dev
Победа! @react_tg

React JS
16 112
Телеграм-канал фронтендерского сообщества Яндекса Yandex for Frontend — канал от фронтендеров Яндекса. Рассказываем, как мы д
Телеграм-канал фронтендерского сообщества Яндекса Yandex for Frontend — канал от фронтендеров Яндекса. Рассказываем, как мы делаем красивые и функциональные интерфейсы в наших продуктах, и показываем людей, которые двигают фронтенд-разработку вперёд. *Подписывайтесь* 👉 **https://t.me/yandex4frontend

React JS
16 112
🖥 Создание PDF с помощью React 🌟 Относительно недавно разработчики Onedoc выпустили UI Kit под названием React Print. Он предназначен для создания PDF-файлов с помощью React и TypeScript. С его помощью можно подготавливать шаблоны счетов, брошюр и любых других документов. Пользуйтесь) 🖥 GitHub @react_tg

React JS
16 112
Лучшие практики React-разработки собраны на бесплатном вебинаре Optimizing React: Web & Beyond! 13 марта команда разработчико
Лучшие практики React-разработки собраны на бесплатном вебинаре Optimizing React: Web & Beyond! 13 марта команда разработчиков Social Discovery Group на примере реальных кейсов расскажут про: Как оптимизировать React-приложения и снизить нагрузку на устройства; Как основные «фичи» React нашли себе применение в монтаже видео, 3D графике и написании ботов; Как не сломать мемоизацию в React. 📅 Дата: 13 марта, 19:00 (GMT+4) 🔉 Язык: русский Регистрируйтесь на вебинар 👉🏻 здесь 👈🏻

React JS
16 112
🖥 Boa — экспериментальный лексер, парсер и компилятор Javascript Тут на днях года состоялся релиз Boa v0.18 — экспериментального лексера, парсера и компилятора Javascript, а также движка ECMAScript, написанного на языке программирования Rust. 🔥 Новая версия Boa позволяет легко встраивать JS-движок в различные проекты, и а также использовать его из WebAssembly и командной строки. Разработчики пояснили, что этот выпуск Boa также знаменует собой серьёзное обновление дизайна сайта проекта и появление нового логотипа. «Поскольку Boa используется все большим количеством проектов, важно, чтобы мы могли предоставить стабильный и надёжный API. Нам кажется, что мы ещё не достигли этого результата, но после обсуждения с командой мы решили нацелиться на выпуск версии 1.0 в ближайшем будущем. Это станет для нас важной вехой, и мы надеемся, что к тому времени у нас будет много новых функций и улучшений», — пояснили разработчики проекта. Впервые проект Boa был представлен на конференции JSConf EU 2019 разработчиком Джейсоном Уильямсом. 🖥Исходный код проекта выложен на GitHub под лицензией MIT 4.6К⭐️ @react_tg

React JS
16 112
🖥 5 вещей, которые сделают ваш React проект лучше *️⃣Используйте JSX-сокращения Допустим, вам нужно управлять видимостью ком
🖥 5 вещей, которые сделают ваш React проект лучше *️⃣Используйте JSX-сокращения Допустим, вам нужно управлять видимостью компонента Navbar с помощью пропса showTitle: Плохо
return (
  <Navbar showTitle={true} />
);    
Хорошо
return(
  <Navbar showTitle />  
);  
*️⃣Используйте тернарные операторы Отличный способ для выбора между двумя компонентами по некоторому условию Плохо
const { role } = user;

if(role === ADMIN) {
  return <AdminUser />
}else{
  return <NormalUser />
}  
Хорошо
const { role } = user;

return role === ADMIN ? <AdminUser /> : <NormalUser />   
*️⃣Используйте преимущества объектных литералов Если у вас выбор между тремя и более компонентами, литералы объектов могут сделать код более читаемым – используйте их вместо сложных условий. Плохо
const {role} = user

switch(role){
  case ADMIN:
    return <AdminUser />
  case EMPLOYEE:
    return <EmployeeUser />
  case USER:
    return <NormalUser />
}  
Хорошо
const {role} = user

const components = {
  ADMIN: AdminUser,
  EMPLOYEE: EmployeeUser,
  USER: NormalUser
};

const Component = components[role];

return <Component />;  
*️⃣Используйте фрагменты Нет никакого преимущества в использовании div вместо Fragment. Зачем нам лишний элемент в DOM? Плохо
return (
  <div>
     <Component1 />
     <Component2 />
     <Component3 />
  </div>  
)   
Хорошо
return (
  <>
     <Component1 />
     <Component2 />
     <Component3 />
  </>  
)    
*️⃣Не определяйте функцию внутри рендера Лучше не смешивать логику и рендер внутри компонента. Плохо
return (
    <button onClick={() => dispatch(ACTION_TO_SEND_DATA)}>    // NOTICE HERE
      This is a bad example 
    </button>  
)  
Хорошо
const submitData = () => dispatch(ACTION_TO_SEND_DATA)

return (
  <button onClick={submitData}>  
    This is a good example 
  </button>  
)   
📎 Ещё больше полезных советов @react_tg

React JS
16 112
🖥 Годный ролик с созданием 6 проектов на ReactJS 📎 Вот пересказ содержимого от YaGPT В ролике автор касается таких тем, как
+2
🖥 Годный ролик с созданием 6 проектов на ReactJS 📎 Вот пересказ содержимого от YaGPT В ролике автор касается таких тем, как: ⏩Передача индекса и корректного варианта ответа в компонент result. ⏩Преобразование ответа в формат JSON и извлечение данных. ⏩Отображение вопросов и вариантов ответов при помощи списка и функции для обработки кликов на вариантах. ⏩Рендеринг пользователей, добавление их в список приглашений и удаление из него. В целом ролик очень полезный и неплохо помогает попрактиковаться и прокачать свой React @react_tg

React JS
16 112
🔥Подборка лучших обучающих каналов для программистов. ➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять 🖥 Frontend Javascript академия - крупнейший js канал React - лучшие гайды и советы по работе с react Frontend - тутрориалы, уроки, гайды, код PHP Книги frontend Задачи frontend ⚡Машинное обучение Machine Learning - полезные статьи новости гайды и разбор кода Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу Ml ru - актуальные статьи, новости, код и обучающие материалы Ml Jobs - вакансии ML ML Книги - актуальные бесплатные книги МО ML чат 🚀 Data Science Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста Data Jobs - ds вакансии Аналитик данных Data Science книги - актуальные бесплатные книги Big data 🏆 Golang Golang - подробные гайды, разбор кода, лучшие практики, заметки Golang собеседование Golang вакансии Golang книги Golang задачи и тесты Golang чат Golang news - новости go #️⃣C# С# академия С# заметки — код, лучшие практики, заметки программиста c# С# задачи и тесты С# библиотека - актуальные бесплатные книги C# вакансии - работа 🐍 Python Python/django Python Собеседование - подготовка к собеседовению python и разбор алгоритмов Pro python - статьи, новости, код и обучающие материалы Python Jobs - вакансии Python Python чат Python книги ☕ Java Java академия Java вакансии Java чат Java вопросы с собеседований Java книги 🛢Базы данных Sql базы данных Библиотека баз данных SQL чат 💻 C++ C++ академия С++ книги C++ задачи - подготовка к собеседовению мл, алгоритмам C++ вакансии 💥 Хакинг Kali Linux Kali linux linux_kal - kali чат Информационная безопасность 🐧 Linux Linux academy 🦀 Rust Rust программирование Rust чат Rust книги для программистов 📲 Мобильная разработка Android разработка Мобильный разработчик гайды и уроки 🇬🇧 Английский для программистов 🧠 Искусственный интеллект ИИ и технологии Neural - нейросети для работы и жизни Книги ИИ Artificial Intelligence 🔥 DevOPs Devops для программистов Книги Devops 🌟 Docker/Kubernets Docker Kubernets 📓 Книги Библиотеки Книг для программситов 💼 Папка с вакансиями: Папка Go разработчика: Папка Python разработчика: Папка Data Science Папка Java разработчика Папка C# Папка Frontend

React JS
16 112
🖥 NLUX — библиотека ReactJS для создания разговорных пользовательских интерфейсов В современном мире взаимодействие с компьютерами и приложениями становится все более естественным и удобным благодаря использованию разговорных интерфейсов и искусственного интеллекта. Однако, интеграция такого функционала в веб-приложения может стать вызовом для разработчиков. В этом может помочь библиотека NLUX (Natural Language User Experience), предоставляющая инструменты для создания разговорных пользовательских интерфейсов в приложениях на ReactJS. NLUX революционизирует интеграцию разговорного искусственного интеллекта в приложения на ReactJS. Представляя собой двойное предложение, то есть не только компоненты/хуки React, но и автономную библиотеку для JavaScript, библиотека NLUX разработана для внедрения функциональности чат-ботов, управляемых искусственным интеллектом, в веб-приложения. NLUX выделяется своей легкостью интеграции и способностью обеспечивать пользователям интеллектуальные взаимодействия на естественном языке, что делает ее мощным инструментом для улучшения вовлеченности и удовлетворенности пользователей. Библиотека также позволяет нам настраивать личность бота, используя естественные языковые подсказки. 📁 Подробнее про NLUX на Хабре 🖥 GitHub @react_tg

React JS
16 112
🖥 Решение проблемы с получением значения поля в ReactJS Если в двух словах, то для надежного получения значения из поля ввод
🖥 Решение проблемы с получением значения поля в 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

React JS
16 112
⁉️ Только начинаешь свой путь в IT, и для трудоустройства не хватает реального опыта работы? Знакомая история? Тогда давай к
⁉️ Только начинаешь свой путь в IT, и для трудоустройства не хватает реального опыта работы? Знакомая история? Тогда давай к нам! 🚀 PREAX — онлайн-стажировка для frontend-разработчиков. Помогаем накопить реальный 💪 опыт, формируем кадровый резерв для работодателей и привлекаем лучших к коммерческим заказам. ЧТО ВНУТРИ? 🔖 Пять больших проектов. Пополнишь портфолио крутыми кейсами. 🔖 Спринты и дедлайны. Научишься рассчитывать время и укладываться в сроки. 🔖 Работа с легаси. Исправишь ошибки, оптимизируешь код и сделаешь рефакторинг. 🔖 Пачка код-ревью. Поделишься опытом и увидишь, как сделать свой код еще лучше. 🔖 Поддержка сообщества. Сможешь задать вопрос и получить совет, если нужна помощь. 🔖 Новый стек технологий. Закрепишь на практике и расширишь стек технологий. 🔖 Гибкий график. Сможешь выстраивать нагрузку, легко совмещая её с работой или учебой. В итоге получишь реальный опыт работы в команде! Попробуй! 1-й спринт — 🆓 БЕСПЛАТНО! Реклама, ООО «Преакс Плэтформ», ОГРН 1237700372755

React JS
16 112
🖥 Обработка имён классов в React 🖥 Интерактивные элементы UI имеют более одного состояния отображения. Например, модальное
🖥 Обработка имён классов в 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

React JS
16 112
🖥 45+ IT-компаний ищут стажёров и джунов Карьерные форумы "Найти IT" — это шанс пообщаться с топовыми компаниями и получить
🖥 45+ IT-компаний ищут стажёров и джунов  Карьерные форумы "Найти IT" — это шанс пообщаться с топовыми компаниями и получить оффер. Среди работодателей будут Сбер, Яндекс, Kaspersky, Avito и многие другие. Что вас ждёт: 🔹 Мастер-классы, кейсы и Q&A-сессии. 🔹 Розыгрыш призов среди участников. 🔹 Обширное пространство для общения и обмена опытом. 🔹 Карьерные консультации от HR-ов. Участие бесплатное!  Выбирайте город и регистрируйтесь👇🏻 📍 Москва — 6 марта 📍 Санкт-Петербург — 6 апреля 📍 Новосибирск — 10 апреля

React JS
16 112
💡Обрабатывай асинхронные ошибки как профи Асинхронные операции, такие как получение данных из внешних API или обработка взаи
💡Обрабатывай асинхронные ошибки как профи Асинхронные операции, такие как получение данных из внешних 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

React JS
16 112
⚡️ ReactRover позволяет развертывать React-приложения одним щелчком мыши Особенности: 🔵Поддержка Vite и CRA 🔵Функциональность пользовательского имени сайта 🔵Поддержка переменных окружения 🔵Ведение журналов в реальном времени 🔵Аутентификация пользователей 🖥 GitHub @react_tg

React JS
16 112
Как разрабатывать CLI на Node.js? Узнайте на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разбере
Как разрабатывать CLI на Node.js? Узнайте на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете: 1. Введение в CLI-разработку 2. Основы работы с Node.js 3. Создание интерфейса CLI 4. Обработку пользовательского ввода 5. Взаимодействие с файловой системой и внешними API 6. Тестирование и отладку 7. Лучшие практики и советы разработки CLI ⏲ Встречаемся 6 марта в 20:00 мск в рамках курса «JavaScript Developer. Professional». Доступна рассрочка на обучение! Пройдите небольшой тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://otus.pw/FR84/?erid=LjN8KM6tN

React JS
16 112
⚡️ ReactRover позволяет развертывать React-приложения одним щелчком мыши Особенности: 🔵Поддержка Vite и CRA 🔵Функциональность пользовательского имени сайта 🔵Поддержка переменных окружения 🔵Ведение журналов в реальном времени 🔵Аутентификация пользователей 🖥 GitHub @react_tg

React JS
16 112
💻 Проверь свои скиллы — задача по написанию hook для загрузки данных На первой итерации решение может выглядеть как-то так:
💻 Проверь свои скиллы — задача по написанию 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 [isLoading, setIsLoading] = useState(false);
   const [error, setError] = useState(null);

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

      setIsLoading(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) setIsLoading(false);
         });

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

   return [data, isLoading, error];
}
Эта задачка позволяет проверить понимание устройства рендеринга React, как устроено хранение состояния, когда происходят перерисовки, как заставить компонент перерисоваться в ответ на асинхронное событие, как устроена "очистка (cleanup) эффекта", как работают сайд-эффекты. @react_tg