fa
Feedback

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

React

React

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

Подборки по React js и все что с ним связано. По всем вопросам @evgenycarter

نمایش بیشتر
2 646
مشترکین
-124 ساعت
-77 روز
-1330 روز

در حال بارگذاری داده‌ها

جذب مشترکین
اکتبر '26
اکتبر '26
+9
در 0 کانال‌ها
سپتامبر '26
+17
در 0 کانال‌ها
Get PRO
اوت '26
+15
در 0 کانال‌ها
Get PRO
ژوئیه '26
+13
در 0 کانال‌ها
Get PRO
ژوئن '26
+16
در 0 کانال‌ها
Get PRO
مه '26
+28
در 0 کانال‌ها
Get PRO
آوریل '26
+17
در 0 کانال‌ها
Get PRO
مارس '26
+12
در 0 کانال‌ها
Get PRO
فوریه '26
+21
در 0 کانال‌ها
Get PRO
ژانویه '26
+21
در 0 کانال‌ها
Get PRO
دسامبر '25
+28
در 0 کانال‌ها
Get PRO
نوامبر '25
+45
در 32 کانال‌ها
Get PRO
اکتبر '25
+31
در 0 کانال‌ها
Get PRO
سپتامبر '25
+56
در 37 کانال‌ها
Get PRO
اوت '25
+37
در 1 کانال‌ها
Get PRO
ژوئیه '25
+51
در 27 کانال‌ها
Get PRO
ژوئن '25
+66
در 20 کانال‌ها
Get PRO
مه '25
+55
در 44 کانال‌ها
Get PRO
آوریل '25
+56
در 37 کانال‌ها
Get PRO
مارس '25
+86
در 38 کانال‌ها
Get PRO
فوریه '25
+72
در 32 کانال‌ها
Get PRO
ژانویه '25
+69
در 33 کانال‌ها
Get PRO
دسامبر '24
+71
در 34 کانال‌ها
Get PRO
نوامبر '24
+79
در 33 کانال‌ها
Get PRO
اکتبر '24
+80
در 30 کانال‌ها
Get PRO
سپتامبر '24
+141
در 29 کانال‌ها
Get PRO
اوت '24
+67
در 18 کانال‌ها
Get PRO
ژوئیه '24
+51
در 0 کانال‌ها
Get PRO
ژوئن '24
+82
در 25 کانال‌ها
Get PRO
مه '24
+89
در 19 کانال‌ها
Get PRO
آوریل '24
+76
در 0 کانال‌ها
Get PRO
مارس '24
+88
در 21 کانال‌ها
Get PRO
فوریه '24
+73
در 19 کانال‌ها
Get PRO
ژانویه '24
+147
در 24 کانال‌ها
Get PRO
دسامبر '23
+91
در 24 کانال‌ها
Get PRO
نوامبر '23
+94
در 17 کانال‌ها
Get PRO
اکتبر '23
+90
در 18 کانال‌ها
Get PRO
سپتامبر '23
+123
در 0 کانال‌ها
Get PRO
اوت '23
+88
در 0 کانال‌ها
Get PRO
ژوئیه '23
+112
در 0 کانال‌ها
Get PRO
ژوئن '23
+67
در 0 کانال‌ها
Get PRO
مه '23
+92
در 0 کانال‌ها
Get PRO
آوریل '23
+81
در 0 کانال‌ها
Get PRO
مارس '23
+42
در 0 کانال‌ها
Get PRO
فوریه '23
+53
در 0 کانال‌ها
Get PRO
ژانویه '23
+93
در 0 کانال‌ها
Get PRO
دسامبر '22
+99
در 0 کانال‌ها
Get PRO
نوامبر '22
+68
در 0 کانال‌ها
Get PRO
اکتبر '22
+160
در 0 کانال‌ها
Get PRO
سپتامبر '22
+232
در 0 کانال‌ها
Get PRO
اوت '22
+314
در 0 کانال‌ها
Get PRO
ژوئیه '22
+408
در 0 کانال‌ها
Get PRO
ژوئن '22
+2 238
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
26 اکتبر0
25 اکتبر0
24 اکتبر0
23 اکتبر0
22 اکتبر0
21 اکتبر0
20 اکتبر+1
19 اکتبر0
18 اکتبر0
17 اکتبر0
16 اکتبر+1
15 اکتبر+1
14 اکتبر0
13 اکتبر0
12 اکتبر0
11 اکتبر+1
10 اکتبر0
09 اکتبر0
08 اکتبر0
07 اکتبر0
06 اکتبر+1
05 اکتبر+2
04 اکتبر+1
03 اکتبر0
02 اکتبر0
01 اکتبر+1
پست‌های کانال
🔥 React: избегай лишнего состояния с derived state! В React часто встречается антипаттерн — derived state — когда ты дублиру
🔥 React: избегай лишнего состояния с derived state! В React часто встречается антипаттерн — derived state — когда ты дублируешь вычисляемое значение в useState. 👎 Пример плохого подхода:

const [items, setItems] = useState([]);
const [filtered, setFiltered] = useState([]);

useEffect(() => {
  setFiltered(items.filter(...));
}, [items]);
🔍 Проблема: ты сам обязан синхронизировать filtered с items. Это источник багов, особенно при сложных зависимостях. ✅ Лучше вычисляй на лету:

const filtered = useMemo(() => items.filter(...), [items]);
🔧 useMemo кэширует результат, и ты не хранишь дублирующее состояние. 🧠 Правило: если значение можно вычислить из другого — не пиши useState. Подробнее: https://react.dev/learn/you-might-not-need-an-effect 📲 Мы в MAX ✍️ @React_lib

2
🚀 Как избавиться от "тряски" компонентов при переключении страниц в React? Сегодня хочу показать вам простой способ, как сделать ваш интерфейс более плавным при навигации между страницами. Вы замечали, что при переходе между роутами компоненты "мигают" или резко перерисовываются? Особенно это бросается в глаза, когда вы используете React Router и на каждой новой странице заново монтируются одни и те же элементы (например, хедер или футер). Решение — layout routes React Router предлагает отличный способ: использовать layout routes. Это позволяет сохранять общие компоненты между страницами без их размонтирования. Вот пример: // Layout.jsx import { Outlet } from "react-router-dom"; export default function Layout() { return ( <> <Header /> <main> <Outlet /> </main> <Footer /> </> ); } // App.jsx import { Routes, Route } from "react-router-dom"; import Layout from "./Layout"; import Home from "./pages/Home"; import About from "./pages/About"; function App() { return ( <Routes> <Route path="/" element={<Layout />}> <Route index element={<Home />} /> <Route path="about" element={<About />} /> </Route> </Routes> ); } Теперь Header и Footer не будут размонтироваться, и интерфейс останется стабильным при переходах. 👀 Плюс: можно добавить плавные анимации переходов с помощью framer-motion без артефактов. Попробуйте — разница ощущается сразу. 📲 Мы в MAX ✍️ @React_lib
271
3
🔥 Как ускорить работу с формами в React Я часто использую библиотеку react-hook-form, и одна из самых частых задач — это соз
🔥 Как ускорить работу с формами в React Я часто использую библиотеку react-hook-form, и одна из самых частых задач — это создание динамических списков полей (например, список контактов пользователя). Раньше я писал кучу ручного кода для добавления/удаления элементов, пока не открыл для себя хук useFieldArray. Пример использования: import { useForm, useFieldArray } from "react-hook-form"; function ContactForm() { const { control, register, handleSubmit } = useForm({ defaultValues: { contacts: [{ value: "" }] } }); const { fields, append, remove } = useFieldArray({ control, name: "contacts" }); return ( <form onSubmit={handleSubmit(data => console.log(data))}> {fields.map((field, index) => ( <div key={field.id}> <input {...register(`contacts.${index}.value`)} /> <button type="button" onClick={() => remove(index)}>Удалить</button> </div> ))} <button type="button" onClick={() => append({ value: "" })}>Добавить контакт</button> <button type="submit">Отправить</button> </form> ); } Этот код автоматически управляет всеми id полей и обновляет форму без лишней боли! Если раньше вы управляли массивами вручную — попробуйте useFieldArray, вы удивитесь, насколько это проще. ❓ Пользуетесь ли вы react-hook-form или предпочитаете что-то другое для работы с формами? 📲 Мы в MAX ✍️ @React_lib
371
4
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Городские📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП https://max.ru/channel_krasnodar_novosty Краснодар Новости https://max.ru/channel_novosibirsk_novosti Новосибирск https://max.ru/channel_samara_novosti Новости Самары https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга https://max.ru/channel_kazan_novosti Новости Казани https://max.ru/channel_omsk_novosti Новости Омска https://max.ru/channel_moskva_24 Москва 24
329
5
Сегодня я покажу вам одну фишку, которую часто недооценивают — как упростить управление глобальным состоянием с помощью Context + useReducer. 🧠 Многие сразу тянут в проект Redux или Zustand, но это не всегда нужно. Если у вас приложение небольшое или средней сложности — useReducer + Context может закрыть все ваши нужды. Вот пример мини-хранилища: // counterContext.tsx import { createContext, useReducer, useContext, ReactNode } from 'react'; const CounterContext = createContext<any>(null); const initialState = { count: 0 }; function reducer(state: typeof initialState, action: { type: string }) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } } export const CounterProvider = ({ children }: { children: ReactNode }) => { const [state, dispatch] = useReducer(reducer, initialState); return ( <CounterContext.Provider value={{ state, dispatch }}> {children} </CounterContext.Provider> ); }; export const useCounter = () => useContext(CounterContext); А вот как использовать: // App.tsx import { CounterProvider, useCounter } from './counterContext'; function Counter() { const { state, dispatch } = useCounter(); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>+</button> <button onClick={() => dispatch({ type: 'decrement' })}>-</button> </div> ); } export default function App() { return ( <CounterProvider> <Counter /> </CounterProvider> ); } 🎯 Такой подход помогает: - Локализовать логику - Избежать лишних зависимостей - Делать масштабирование более контролируемым Если в будущем нужно будет вынести логику в отдельные модули или добавить middlewares — это тоже можно сделать! А вы как решаете глобальное состояние в небольших проектах? Используете кастомные хуки, Zustand или всё же Redux? 📲 Мы в MAX ✍️ @React_lib
365
6
Сегодня я покажу вам фичу React, которую многие недооценивают — useCallback. Часто его либо используют слишком много, либо вообще не используют. А ведь он может здорово помочь оптимизировать ререндеры, особенно когда дело касается передачи функций в дочерние компоненты. Что делает useCallback? Он кэширует функцию, возвращая ту же ссылку, пока зависимости не изменятся. const handleClick = useCallback(() => { console.log('Clicked!'); }, []); Без него, при каждом ререндере компонента создаётся новая функция, и если вы передаёте её в props, это может триггерить лишние ререндеры у дочерних компонентов. Где реально нужен useCallback? - Когда функция передаётся в мемоизированный компонент (React.memo) - Когда функция используется в useEffect, useMemo или других хук-эффектах - Когда вы работаете с большими списками, и каждый элемент зависит от onClick или другого хендлера Где не нужен? - В простых компонентах без глубоких вложенностей - Когда вы не передаёте функцию в другие компоненты - Когда оптимизация важна меньше, чем читаемость Мини-пример const Parent = () => { const [count, setCount] = useState(0); const increment = useCallback(() => { setCount(c => c + 1); }, []); return <Child onClick={increment} />; }; const Child = React.memo(({ onClick }: { onClick: () => void }) => { console.log('Child rendered'); return <button onClick={onClick}>Click me</button>; }); Если бы мы не использовали useCallback, Child бы перерендеривался каждый раз, даже если count не менялся внутри него. Пишите в комментах, как часто вы используете useCallback — помогает или только мешает? 📲 Мы в MAX ✍️ @React_lib
382
7
👨‍💻 Фронтенд с AI: что можно делегировать агентам 5 октября, стартует конференция Podlodka Frontend Crew — сезон о том, как+4
👨‍💻 Фронтенд с AI: что можно делегировать агентам 5 октября, стартует конференция Podlodka Frontend Crew — сезон о том, как применять AI во фронтенд-разработке на практике. Участники конференции узнают: • Как находить prompt injection и противостоять таким атакам; • Какие подходы помогают повысить доверие к результатам агентской разработки; • Как проводить ревью кода, созданного AI-агентами; • Как AI помогает упростить починку багов. В программе ещё много практических кейсов. Также нужно отметить, что у конференции очень удобный формат. Это пять дней Zoom-сессий по утрам и вечерам и закрытое Telegram-комьюнити, где можно обсудить новый опыт и узнать от единомышленников то, что не догадаешься спросить у своей LLM. Приходите, чтобы разобраться, какие задачи уже можно делегировать AI, где важно сохранять контроль и как выстроить системную работу с AI в команде или проекте. Скидка по промокоду codepen 🔗 Программа и билеты: https://podlodka.io/fecrew
521
8
Сегодня покажу вам, как в React удобно работать с формами на базе react-hook-form. Это мой go-to инструмент для любых форм в проектах. Почему именно react-hook-form? - ⚡ Быстрее, чем Formik (нет лишних ререндеров) - 🔍 Простая валидация через yup или zod - 🔌 Легко интегрируется с UI-библиотеками (MUI, Ant Design, Tailwind) Минималистичный пример: import { useForm } from "react-hook-form"; export default function MyForm() { const { register, handleSubmit } = useForm(); const onSubmit = data => console.log(data); return ( <form onSubmit={handleSubmit(onSubmit)}> <input {...register("email")} placeholder="Email" /> <input type="submit" /> </form> ); } Интеграция с Yup: import { useForm } from "react-hook-form"; import { yupResolver } from "@hookform/resolvers/yup"; import * as yup from "yup"; const schema = yup.object({ email: yup.string().email().required(), }).required(); export default function ValidatedForm() { const { register, handleSubmit, formState: { errors } } = useForm({ resolver: yupResolver(schema), }); return ( <form onSubmit={handleSubmit(data => console.log(data))}> <input {...register("email")} /> <p>{errors.email?.message}</p> <button type="submit">Отправить</button> </form> ); } 🔥 Очень советую попробовать на новом проекте. Работать с формами становится не только проще, но и приятно. 📲 Мы в MAX ✍️ @React_lib
508
9
Как сделать loader с задержкой, чтобы не мигал? Иногда при загрузке данных хочется показать спиннер, но только если это занимает больше, скажем, 300мс. Это позволяет избежать "мигающего" лоадера при быстрой загрузке. Я часто использую этот приём, особенно при загрузке модалок или переключении вкладок. Вот простая реализация на React: import { useState, useEffect } from "react"; function useDelayedLoader(isLoading: boolean, delay = 300) { const [showLoader, setShowLoader] = useState(false); useEffect(() => { let timeout: ReturnType<typeof setTimeout>; if (isLoading) { timeout = setTimeout(() => setShowLoader(true), delay); } else { setShowLoader(false); } return () => clearTimeout(timeout); }, [isLoading, delay]); return showLoader; } Использование: const isLoading = ...; // например, из useQuery или useState const showLoader = useDelayedLoader(isLoading); return ( <> {showLoader && <Spinner />} {!isLoading && <Content />} </> ); ⚡️ Профит — спиннер появляется только если загрузка реально долгая. Пользователь не чувствует "дёргания" интерфейса. Маленький UX-трюк, но эффект — огромный. 📲 Мы в MAX ✍️ @React_lib
536
10
🚨 Избегай монолитных компонентов, которые объединяют в себе отображение, управление состоянием и конфигурацию (например, ID,
🚨 Избегай монолитных компонентов, которые объединяют в себе отображение, управление состоянием и конфигурацию (например, ID, ref'ы) — такие компоненты сложнее сопровождать, тестировать и переиспользовать. ✅ Вместо этого разделяй функциональность на составные (composable) компоненты и используй context для передачи конфигурации и состояния. 📲 Мы в MAX ✍️ @React_lib
580
11
❌ Избегайте использования нескольких переменных состояния для отслеживания статуса. ✅ Вместо этого используйте перечисления (
❌ Избегайте использования нескольких переменных состояния для отслеживания статуса. ✅ Вместо этого используйте перечисления (enums). 📲 Мы в MAX ✍️ @React_lib
665
12
Сегодня написал пост на тему, которая регулярно бьёт по скорости разработки: почему React-приложение “тормозит”, даже когда кажется, что код нормальный. Часто вижу одну и ту же ситуацию: компонент маленький, логика простая, данных немного, а интерфейс всё равно начинает дёргаться. Особенно в формах, таблицах и списках. Обычно проблема не в React как таковом. Проблема в том, что мы слишком поздно начинаем смотреть что именно ререндерится. Вот 3 вещи, которые я первым делом проверяю: 1. Родитель слишком “шумный” Если родительский компонент часто обновляет state, все дочерние компоненты тоже могут улетать в ререндер. Даже если визуально ничего не меняется. 2. useMemo и useCallback не спасают автоматически Их часто добавляют “на всякий случай”, но без понимания, где узкое место. В итоге код становится сложнее, а пользы - ноль. 3. Ключи в списках Нестабильные key - классика. Если в списке стоит index, React может пересоздавать элементы там, где не должен. Особенно больно это ощущается в интерактивных списках. Мой рабочий подход простой: • сначала открываю React DevTools Profiler • нахожу, какой компонент ререндерится чаще всего • проверяю, это реально нужно или нет • только потом оптимизирую Главная мысль: не оптимизируйте React вслепую. Сначала найдите источник лишних ререндеров. Очень часто после этого оказывается, что фикс занимает 5 минут, а не 2 часа. 📲 Мы в MAX ✍️ @React_lib
646
13
❌ Избегайте «прокидывания» пропсов (prop-drilling) для расширения компонентов ✅ Вместо этого используйте композицию 📲 Мы в M
❌ Избегайте «прокидывания» пропсов (prop-drilling) для расширения компонентов ✅ Вместо этого используйте композицию 📲 Мы в MAX ✍️ @React_lib
574
14
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Городские📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП https://max.ru/channel_krasnodar_novosty Краснодар Новости https://max.ru/channel_novosibirsk_novosti Новосибирск https://max.ru/channel_samara_novosti Новости Самары https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга https://max.ru/channel_kazan_novosti Новости Казани https://max.ru/channel_omsk_novosti Новости Омска https://max.ru/channel_moskva_24 Москва 24
499
15
⚛️ Реактивность - это просто (и всего 35 строк кода) Мы часто воспринимаем реактивность в современных фреймворках (Vue, Solid, MobX или Preact Signals) как некую "магию". Кажется, что под капотом там сложные механизмы, доступные только избранным архитекторам. Автор блога romgrk решил развеять этот миф и показал, что базовый движок реактивности можно реализовать буквально за 35 строчек кода. В статье «Reactivity is easy» он разбирает ключевые концепции: 🔹 Signals (Сигналы) — контейнеры для значений. 🔹 Effects (Эффекты) — функции, которые реагируют на изменения. 🔹 Dependency Tracking — как именно эффект "узнает", на какие сигналы он подписан (спойлер: через глобальный контекст). Отличный материал для тех, кто хочет перестать бояться "магии" стейт-менеджеров и понять, как всё работает на уровне чистого JS. 👉 Читать статью: https://romgrk.com/posts/reactivity-is-easy #js #frontend #reactivity #architecture 📲 Мы в MAX ✍️ @React_lib
402
16
Сегодня хочу поговорить про типичную боль React-разработчиков - лишние ререндеры. Я регулярно вижу код, где приложение «тормо
Сегодня хочу поговорить про типичную боль React-разработчиков - лишние ререндеры. Я регулярно вижу код, где приложение «тормозит», хотя логика простая. В 80% случаев причина банальна: компоненты перерисовываются без необходимости. Что я проверяю в первую очередь 1️⃣ props меняются по ссылке <Component data={{ a: 1 }} /> Каждый рендер - новый объект → новый ререндер. Решение: useMemo. 2️⃣ функции создаются заново onClick={() => doSomething()} Если компонент обёрнут в memo - он всё равно будет ререндериться. Решение: useCallback. 3️⃣ memo используется «для галочки» React.memo без анализа - зло. Если props всегда новые → memo бесполезен и даже мешает. 4️⃣ state лежит слишком высоко Когда useState в родителе, а нужен только одному дочернему компоненту - привет лишним обновлениям. Мой личный чек-лист - Сначала DevTools → Highlight updates - Потом проверяю ссылки - И только в конце - memo, useMemo, useCallback ⚠️ Важно: оптимизация, это не рефлекс, а осознанный шаг. Сначала простота, потом скорость. 📲 Мы в MAX ✍️ @React_lib
467
17
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Городские📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП https://max.ru/channel_krasnodar_novosty Краснодар Новости https://max.ru/channel_novosibirsk_novosti Новосибирск https://max.ru/channel_samara_novosti Новости Самары https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга https://max.ru/channel_kazan_novosti Новости Казани https://max.ru/channel_omsk_novosti Новости Омска https://max.ru/channel_moskva_24 Москва 24
463
18
🔥 Антипаттерн в React: избыточные зависимости useEffect Встречали такое? useEffect(() => { fetchData(id); }, [id, fetchData]
🔥 Антипаттерн в React: избыточные зависимости useEffect Встречали такое? useEffect(() => { fetchData(id); }, [id, fetchData]); ❗️Проблема: fetchData — это функция, которая переопределяется при каждом рендере. В итоге эффект срабатывает чаще, чем должен, даже если id не менялся. 👎 Это вызывает лишние запросы, лаги и баги в логике. 💡 Решения: 1. Обёрнуть в useCallback: const fetchData = useCallback((id: string) => { // ... }, []); 2. Вынести вне компонента (если она не зависит от состояния): const fetchData = (id: string) => { // ... }; 3. Игнорировать в зависимостях (как временный хак, но осторожно!): // eslint-disable-next-line react-hooks/exhaustive-deps ✅ Правильное управление зависимостями в useEffect — ключ к стабильному и предсказуемому поведению компонентов. 📲 Мы в MAX ✍️ @React_lib
439
19
🚀 Что такое условный рендеринг в React и зачем он нужен? Если говорить просто, условный рендеринг - это способность вашего React-приложения решать, что именно показывать пользователю в зависимости от определенных условий (состояния, пропсов и т.д.). Думайте об этом как о "if... else...", но для вашего пользовательского интерфейса (UI). - ЕСЛИ пользователь вошел в систему, ТО показать компонент <UserProfile />. - ИНАЧЕ показать компонент <LoginForm />. 💡 Для чего он нужен? Без условного рендеринга все наши приложения были бы статичными. Именно эта концепция делает интерфейс динамическим, "живым" и отзывчивым. Он нужен буквально повсюду. Вот самые частые примеры: - Пока идет загрузка данных с сервера: Мы показываем <Spinner /> (крутилку). Как только данные пришли — показываем <DataList />. - Аутентификация: Показываем "Профиль", если isLoggedIn === true, и "Войти", если isLoggedIn === false. - Обработка ошибок: Если при загрузке произошла ошибка, мы показываем <ErrorMessage /> вместо контента. - Пустые состояния: Показываем "Ваша корзина пуста", если cart.items.length === 0, и список товаров, если в ней что-то есть. - Интерактив: Показ/скрытие модальных окон, выпадающих меню или вкладок по клику. 🛠️ Как это сделать? В React есть несколько популярных способов: 1. Тернарный оператор (? :) - самый частый выбор. {isLoading ? <Spinner /> : <Content />} 2. Логический оператор "И" (&&) - идеален, когда вам нужно что-то показать или не показать ничего (нет ветки "else"). {hasMessages && <NotificationBadge />} 3. Обычный if/else - используется внутри тела компонента, до return, для более сложной логики. Условный рендеринг - это не просто "фича", это сам смысл React. Это то, что позволяет вашему UI реагировать на изменения данных и действия пользователя. #React #JavaScript #Frontend #Development #ConditionalRendering 📲 Мы в MAX ✍️ @React_lib
417
20
Кастомные хуки (Custom Hooks). Создаем свой первый кастомный хук useWindowSize Сегодня напишем простой, но очень полезный хук - useWindowSize. Он будет отслеживать ширину и высоту окна браузера. Это пригодится, если вам нужно менять верстку (например, скрывать сайдбар) при изменении размера экрана. Мы создадим функцию, которая: 1. Использует useState для хранения размеров. 2. Использует useEffect для подписки на событие resize. 3. Важно: Не забываем удалять обработчик событий (cleanup function), чтобы не нагружать память! Вот готовый пример. Можете сохранить его в файл useWindowSize.js. import { useState, useEffect } from 'react'; // Наш кастомный хук function useWindowSize() { // 1. Инициализируем состояние const [windowSize, setWindowSize] = useState({ width: undefined, height: undefined, }); useEffect(() => { // Функция для обновления состояния function handleResize() { setWindowSize({ width: window.innerWidth, height: window.innerHeight, }); } // Устанавливаем размер сразу при загрузке handleResize(); // 2. Добавляем слушатель события изменения размера окна window.addEventListener("resize", handleResize); // 3. Очистка: удаляем слушатель при размонтировании return () => window.removeEventListener("resize", handleResize); }, []); // Пустой массив зависимостей = запускаем один раз return windowSize; } export default useWindowSize; 🚀 Как это использовать в компоненте? Теперь ваш компонент становится чистым и понятным. Никакой лишней логики внутри! import React from 'react'; import useWindowSize from './useWindowSize'; const App = () => { // Просто вызываем наш хук const { width, height } = useWindowSize(); return ( <div style={{ textAlign: 'center', marginTop: '50px' }}> <h1>📏 Размер окна</h1> <p>Ширина: <strong>{width}px</strong></p> <p>Высота: <strong>{height}px</strong></p> {width < 600 ? ( <p>📱 Похоже, вы на мобильном устройстве!</p> ) : ( <p>💻 Это десктопная версия.</p> )} </div> ); }; export default App; 📲 Мы в MAX ✍️ @React_lib
453