React JS
React программирование @haarrp - admin @itchannels_telegram - 🔥лучшие ит-каналы @javascriptv - продвинутый javascript @programming_books_it - бесплатные it книги @ai_machinelearning_big_data - ml № 5037566384
显示更多📈 Telegram 频道 React JS 的分析概览
频道 React JS (@react_tg) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 16 712 名订阅者,在 技术与应用 类别中位列第 7 916,并在 俄罗斯 地区排名第 40 309 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 16 712 名订阅者。
根据 12 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -161,过去 24 小时变化为 0,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 15.67%。内容发布后 24 小时内通常能获得 6.12% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 2 620 次浏览,首日通常累积 1 023 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 14。
- 主题关注点: 内容集中在 javascript, github, css, интерфейс, браузер 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“React программирование
@haarrp - admin
@itchannels_telegram - 🔥лучшие ит-каналы
@javascriptv - продвинутый javascript
@programming_books_it - бесплатные it книги
@ai_machinelearning_big_data - ml
№ 5037566384”
凭借高频更新(最新数据采集于 13 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
ref, представляющий ссылку на соответствующий элемент, и вызовите в контексте этого элемента метод click(). Пример:
import React, { useRef } from 'react';
function MyButton() {
const btnRef = useRef();
// Функция для симуляции клика
const simulateClick = () => {
btnRef.current?.click();
};
return (
<>
<button ref={btnRef} onClick={() => alert('Кликнуто!')}>Кликните меня</button>
<button onClick={simulateClick}>Симуляция клика</button>
</>
);
}
В этом примере с использованием хука `useRef` создаётся ссылка btnRef на первую кнопку, затем функцией `simulateClick` вызывается метод `click()` у btnRef.current, что имитирует клик по этой кнопке.
⏩Более детально
Использование refs: ключ к DOM. В то время как в React основным является декларативный подход к управлению DOM, в ряде случаев необходим прямой доступ к DOM-элементам. Предоставить такую возможность позволяют refs. Для функциональных компонентов используется хук useRef, для классовых — React.createRef.
⏩Особенности вызова событий вручную. При решении вручную инициировать события следует учесть ряд нюансов:
— Лексическое окружение: в классовых компонентах для сохранения контекста this используйте стрелочные функции.
— Хранение refs: в классовых компонентах refs обычно присваиваются как свойства класса.
— Вложенность компонентов: проверьте корректность расположения элементов в render-методе компонента.
— Предотвращение стандартного поведения: чтобы контролировать стандартную реакцию на события, используйте e.preventDefault().
📎 Читать подробнее
@react_tgmin, max и clamp упрощает изменение ширины элементов в адаптивных макетах.
• Aspect-ratio упрощает отображение адаптивных изображений и видео с определенным соотношением сторон.
• Определение пользовательских переменных упрощает использование одного и того же значения цвета в разных местах на странице.
• CSS предоставляет механизм управления состоянием, включая использование псевдокласса focus-within.
• Использование относительных единиц, таких как em и rem, вместо статических значений пикселей может быть более предпочтительным.
• Ориентирование на цвета HSL упрощает вычисление красивой цветовой палитры.
📎 Статья
@react_tg! и Tab
Это сочетание клавиш за секунду создаёт базовую структуру кода или вложенные теги.
⏩Быстро добавить комментарий
Windows — Ctrl + /
macOS — Command + /
⏩Перейти к строке под номером
Windows — Ctrl + G
macOS — Control + G
Иногда отладчики внезапно сообщают, что на строке 953 случилась непоправимая инфернальная ошибка вселенной. Чтобы не выискивать вручную, не листать и не тратить на это время, нажмите Ctrl + G, введите номер строки и спокойно спасайте вселенную.
⏩Поменять строку местами с соседними
Windows — Alt + ↑ / ↓
macOS Option + ↑ / ↓
Alt и стрелки меняют текущую строку местами с соседними.
⏩Дублировать строку
Windows Shift + Alt + ↓ / ↑
macOS Shift + Option + ↓ / ↑
⏩Перейти к парной скобке
Windows Ctrl + Shift + \
macOS Shift + Command + \
Если кода много, очень просто запутаться в закрывающих и открывающих скобках, непонятно, где какой блок. На помощь приходит Ctrl + Shift + \.
⏩Переименовать переменную
Windows — F2
macOS — F2
Чтобы не выискивать переменные по всему документу и не менять руками, есть F2.
⏩Отформатировать документ
Windows — Shift + Alt + F
macOS Shift + Option + F
VS Code предложит выбрать расширение из существующих, а потом красиво отформатирует документ — расставит по местам блоки и скобки и т.д.
⏩Перейти к переменной
Windows — F12
macOS — F12
F12 перенесёт вас к объявлению выделенной переменной, функции или метода. Если объявление в другом файле — всё равно перенесёт.
⏩Включить или выключить перенос слов
Windows — Alt + Z
macOS Option + Z
Если строки кода или текст не вмещаются в редактор по ширине, включите перенос.
⏩Включить дзен-режим
Windows — Ctrl + KZ
macOS — Command + KZ
Дзен-режим скрывает все панели, разворачивает редактор на весь экран, и вы можете думать только о коде. Чтобы вернуться в реальный мир, нажмите Escape.
@react_tg_ (например: _comComponents);
— время запуска локального сервера React Email 2.0 при новой установке составляет около 7 секунд (для React Email 1.10.1 этот параметр составляет 40 секунд);
— после завершения первоначальной настройки время загрузки составляет около 1 секунды (зависит от конфигурации сервера);
— улучшена фильтрация отображения электронных писем на боковой панели, которая показывает их только в том случае, если где-то внутри у них есть настройки экспорта по умолчанию. Это своего рода эвристика, и её всё еще можно улучшить.
🖥 Исходный код проекта доступен на GitHub под лицензией MIT License
⭐️ 11.9K
@react_tgkubectl и minikube, запуск
— конфигурирование YAML-файла
— ...короче, весь процесс
Супер полезно, экономит время, не нужно проверять всё методом тыка
📎 Гайд
@react_tg// до рефакторинга
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_tgnpm или 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_tgNavbar с помощью пропса 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
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
