Telegram Group Search
👩‍💻 Рендеринг в React

В React рендеринг — это процесс, при котором компонент заново отрисовывается на основе новых данных. Этот процесс происходит по нескольким причинам:

📌 1. Изменение состояния (state)
Если состояние компонента меняется, React автоматически запускает его ререндеринг. Например:


const CounterButton = () => {
const [count, setCount] = useState(0);

return (
<button onClick={() => setCount(count + 1)}>
Click me {count} times
</button>
);
};

Когда мы вызываем setCount, значение count меняется, что приводит к ререндерингу компонента, чтобы отобразить обновлённое число.

📌 2. Изменение пропсов (props)
Пропсы сами по себе не являются первичной причиной ререндеринга, а скорее следствием изменения состояния в родительском компоненте. Если состояние родителя обновляется, он перерисовывается и передает изменённые пропсы дочернему компоненту. Это приводит к ререндерингу дочернего компонента:


// Родительский компонент
const Parent = () => {
const [text, setText] = useState('Hello');

return (
<>
<Child message={text} />
<button onClick={() => setText('Hello, World!')}>Change Text</button>
</>
);
};

// Дочерний компонент
const Child = ({ message }) => <div>{message}</div>;

Когда setText меняет состояние text, компонент Parent перерисовывается, и передаёт новое значение пропса message в Child, что вызывает ререндеринг дочернего компонента.

Примечание: При использовании React.memo изменения пропсов действительно считаются причиной ререндеринга, если новый пропс отличается от предыдущего.

📌 3. Изменение контекста (Context)
Если компонент использует контекст (useContext или <Context.Consumer>), и его значение меняется, то все компоненты, подписанные на этот контекст, будут перерисованы:


const ThemeContext = React.createContext('light');

const Parent = () => {
const [theme, setTheme] = useState('light');

return (
<ThemeContext.Provider value={theme}>
<Child />
<button onClick={() => setTheme('dark')}>Toggle Theme</button>
</ThemeContext.Provider>
);
};

const Child = () => {
const theme = useContext(ThemeContext);
return <div>Current theme: {theme}</div>;
};

Когда значение контекста theme изменяется (например, с 'light' на 'dark'), компонент Child ререндерится, чтобы отобразить новое значение темы.

📌 4. Ререндеринг родительского компонента
Даже если состояние компонента и его пропсы остаются неизменными, он будет перерисован, если родительский компонент ререндерится (даже без видимых изменений). Это связано с тем, что дочерние компоненты автоматически ререндерятся вместе с родительским компонентом. Например:


const Parent = () => {
const [count, setCount] = useState(0);

return (
<>
<button onClick={() => setCount(count + 1)}>Increment</button>
<Child />
</>
);
};

const Child = () => <div>I'm a child</div>;

Здесь Child не зависит от состояния count, но каждый раз, когда Parent ререндерится, Child ререндерится тоже. Это можно предотвратить с помощью React.memo.

Как избежать лишних ререндеров?

✔️ React.memo: предотвращает ререндеринг компонента, если его пропсы не изменились.
✔️ Хук useCallback и useMemo: сохраняют функции и значения, чтобы они не создавались заново при каждом ререндеринге.
✔️ Оптимизация контекста: разбивайте контекст на отдельные провайдеры, чтобы уменьшить количество компонентов, реагирующих на изменение его значения.

#react #frontend #memo #render
Please open Telegram to view this post
VIEW IN TELEGRAM
Я постоянно говорю о пользе сообщества: оно мотивирует, даёт ответы на вопросы и поддержку. У моего коллеги есть интересный формат — они создают продукты за 1-2 месяца и выводят их на рынок. Участники прокачивают свои навыки и работают над реальными проектами с нуля до релиза.

Для кого это:
- Для тех, кто готов вложиться в проект, но не может найти работу.
- Для тех, кто не хочет "накручивать" опыт, а реально хочет поработать в команде и получить ценный опыт.

Что они предлагают:
- Избежать ошибок новичков — научат запускать проекты с минимальными ресурсами.
- Возможность запустить пет-проект, который станет отличной строкой в резюме.
- Работа в сильной команде: полный цикл разработки от идеи до релиза.
- Обмен опытом с профессионалами в разработке, аналитике, инфраструктуре и маркетинге.
- Шанс создать свой успешный стартап.
- В этом сезоне принимаются новички без коммерческого опыта, но с опытом работы над собственными проектами и желанием развиваться в стартапах.
- При высокой вовлечённости и прогрессе возможно получение финансовой поддержки уже после второго спринта (2 недели).

Как это работает:
1. Помогут проверить идею и построить дорожную карту.
2. Соберут команду из 2-5 человек, предоставят всю инфраструктуру и инструменты.
3. Организуют консультации с опытными специалистами.
4. Через 1-2 месяца команда выпускает продукт.

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

Sprint Labs — это сообщество для тех, кто готов не просто мечтать, а действовать и создавать.
https://forms.gle/W9HCQhAkXXMjjFs36
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Архитектура Frontend с Нуля до Продакшена. Docker, Webpack, CI/CD, React, Deploy

В этом видео мы подробно рассмотрим архитектуру Frontend-приложений, начиная с технологий и инструментов, заканчивая настройками и деплоем. Это будет комплексный обзор всех ключевых компонентов архитектуры: React, Redux, Storybook, Webpack, Docker, Nginx, CI/CD и других технологий.

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

Этого видео мне не хватало, когда я с нуля создавал приложения. Сколько боли было в поиске информации. Рад, что многим это видео полезно.

🔗 Вы знаете, как с пользой провести выходные: ВИДЕО

#frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍 Сегодня я выступаю на стриме для студентов технических вузов с сообществом "Осознанная Меркантильность". Тема: "Какие проблемы вас ждут во время обучения и как их обойти". Честно говоря, у меня до сих пор есть страх публичных выступлений — стеснение и нервозность всё ещё со мной.

Что интересно, сейчас я нахожусь в отпуске: отель 5 звезд с "всё включено", бассейн, спа, развлечения на любой вкус. Но, несмотря на это, я осознанно выбираю выделить 3-4 часа своего времени, чтобы участвовать в стриме. Это мой способ выйти из зоны комфорта. На протяжении всего отпуска я продолжаю работать над проектом YeaHub, созваниваться с учениками и готовить лекции. Это ещё один выход из зоны комфорта, который приближает меня к успеху.

А что вы делаете, чтобы достичь своих целей?👇👇👇
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🛡 Пример сильных достижений в ваше резюме.

Примерно такие достижения добавляют ученики после практики в YeaHub.

✔️ Запустил ленты новинок и популярных материалов, автоматически обновляющиеся через Redux Toolkit и RTK Query для получения данных, что упростило поиск актуального контента и повысило его доступность.

✔️ Внедрил систему избранного для сохранения материалов в личном кабинете с помощью Redux Toolkit для управления состоянием, что позволило пользователям возвращаться к важным статьям и конспектам в удобное время.

✔️ Разработал рейтинговую систему для преподавателей, оценивающую активность и популярность материалов с использованием данных из RTK Query, что мотивировало авторов и повышало качество контента на платформе.

✔️ Реализовал панель управления публикациями для преподавателей, используя React, Redux Toolkit и Formik для создания форм, что позволило авторам легко создавать, редактировать и удалять свои материалы, а также отслеживать популярность публикаций и взаимодействие с пользователями.

Что тут есть?
1. Сильные слова (например, "Запустил", "Внедрил").
2. Ключевые слова (такие как "Redux Toolkit", "RTK Query").
3. Бизнес-кейсы (например, рейтинг преподавателей).
4. Польза для бизнеса (упрощение поиска актуального контента).

В YeaHub уже расписано более 50 достижений. Суть в том, что ученики реально делали это, и у них есть примеры, на которые можно посмотреть, чтобы понять, что изучить. Также есть гайд и конспект по архитектуре YeaHub — как происходит деплой, как настроен Webpack, как работает CI/CD и так далее. Это закрывает любые вопросы по опыту на собеседовании. Я называю это "умной накруткой опыта", когда ты прокачиваешься и практикуешься 2-3 месяца, а потом идёшь трудоустраиваться на Middle с реальными кейсами, а не выдуманными из головы.

👍 Полный гайд по резюме есть тут - ГАЙД В НОУШЕН
Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub, уже скоро, но это не точно😅

Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея

До 4 ноября будем тестировать!

#yeahub
Какие проблемы вас ждут во время обучения и как их обойти?

Недавно выступал для студентов с докладом. Список проблем из видео:
🌧 Что учить? Так много технологий, как выбрать?
🌧 Я ничего не запоминаю, слишком много терминов
🌧 Я не могу понять тему
🌧 Я не могу писать код сам
🌧 Мой код не работает
🌧 Я застрял, не знаю, что учить дальше
🌧 Я теряю мотивацию и мне лень учиться

Будет полезно посмотреть для новичков. Начало с 48:40 минуты

https://boosty.to/m0rtymerr/posts/b82357bd-fa1b-4f6d-8205-6acf9ed92f91?share=post_link
Please open Telegram to view this post
VIEW IN TELEGRAM
Организация кода с использованием классов в JavaScript

Организация кода с использованием классов в JavaScript позволяет структурировать функциональность приложения, делая его более читаемым, поддерживаемым и масштабируемым. Рассмотрим два примера классов: один для управления API-запросами, другой для работы с задачами TODO.

⌛️ Класс для организации API-запросов
Этот класс будет отвечать за выполнение HTTP-запросов к различным конечным точкам API. Он может содержать методы для GET, POST, PUT, DELETE и других типов запросов, а также обрабатывать общие параметры, такие как заголовки и обработка ошибок.


class ApiService {
constructor(baseURL, defaultHeaders = {}) {
this.baseURL = baseURL;
this.defaultHeaders = defaultHeaders;
}

async request(endpoint, method = 'GET', data = null, headers = {}) {
const config = {
method,
headers: { ...this.defaultHeaders, ...headers },
};

if (data) {
config.headers['Content-Type'] = 'application/json';
config.body = JSON.stringify(data);
}

try {
const response = await fetch(`${this.baseURL}${endpoint}`, config);
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.message || 'Ошибка сети');
}
return await response.json();
} catch (error) {
console.error(`Ошибка при выполнении запроса: ${error.message}`);
throw error;
}
}

get(endpoint, headers = {}) {
return this.request(endpoint, 'GET', null, headers);
}

post(endpoint, data, headers = {}) {
return this.request(endpoint, 'POST', data, headers);
}

put(endpoint, data, headers = {}) {
return this.request(endpoint, 'PUT', data, headers);
}

delete(endpoint, headers = {}) {
return this.request(endpoint, 'DELETE', null, headers);
}
}


🖥 Класс для работы с TODO
Этот класс будет использовать ApiService для взаимодействия с сервером и управлять задачами TODO. Он будет включать методы для создания, получения, обновления и удаления задач.


class TodoService {
constructor(apiService) {
this.api = apiService;
this.endpoint = '/todos';
}

// Получить все задачи
getAllTodos() {
return this.api.get(this.endpoint);
}

// Получить задачу по ID
getTodoById(id) {
return this.api.get(`${this.endpoint}/${id}`);
}

// Создать новую задачу
createTodo(todoData) {
return this.api.post(this.endpoint, todoData);
}

// Обновить существующую задачу
updateTodo(id, updatedData) {
return this.api.put(`${this.endpoint}/${id}`, updatedData);
}

// Удалить задачу
deleteTodo(id) {
return this.api.delete(`${this.endpoint}/${id}`);
}
}


✔️ Пример использования

const api = new ApiService('https://api.example.com', {
Authorization: 'Bearer your-token-here',
});

const todoService = new TodoService(api);

// Получить все задачи
todoService.getAllTodos()
.then(todos => console.log(todos))
.catch(error => console.error(error));

// Создать новую задачу
todoService.createTodo({ title: 'Новая задача', completed: false })
.then(todo => console.log('Создано:', todo))
.catch(error => console.error(error));
Please open Telegram to view this post
VIEW IN TELEGRAM
⁉️ Почему использование классов полезно

- Инкапсуляция логики: Классы позволяют группировать связанные функции и данные вместе. В нашем примере ApiService отвечает только за HTTP-запросы, а TodoService — за управление задачами. Это разделение ответственности облегчает понимание и поддержку кода.
- Повторное использование кода: Общие методы, такие как get, post, put, delete в ApiService, могут быть использованы разными сервисами (не только TodoService). Это уменьшает дублирование кода и облегчает внесение изменений в одном месте.
- Удобство тестирования: Классы облегчают написание модульных тестов. Можно протестировать методы классов изолированно, замокав зависимости, такие как API-запросы.
- Масштабируемость: При росте приложения можно легко добавлять новые сервисы, наследуя или расширяя существующие классы. Это делает архитектуру приложения гибкой и устойчивой к изменениям.
- Поддержка и читаемость: Структурированный код легче читать и поддерживать, особенно в больших командах. Классы с четко определенными методами и назначением позволяют быстро понять, где искать нужную функциональность.
- Вынесение общих частей: Общие части, такие как базовый URL или заголовки запросов, можно определить в одном месте (ApiService), что упрощает их изменение и управление.

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

#frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
✉️ YeaHub объединяет IT-специалистов.

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

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

Мы стремимся создать центральное место и единую точку входа в мир IT, охватывая все сферы: обучение, развитие, карьеру, общение и личный брендинг. Это будет социальная сеть, специально разработанная для IT-специалистов.

В первую очередь мы реализуем сервисы для обучения и развития, включая:

✔️ Проверку знаний и подготовку к собеседованиям
✔️ Платформу для публикации и чтения статей
✔️ Сервис для анонсирования и участия в мероприятиях в IT
✔️ Полный roadmap по всем профессиям в области технологий

В дальнейшем мы планируем запустить более 20 дополнительных сервисов. Главная особенность нашей платформы заключается в едином профиле, который будет отображать всю активность пользователя в IT: количество написанных статей, имеющиеся навыки, посещенные мероприятия и многое другое.

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

#yeahub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн Адаптер в JavaScript. Продвинутый Frontend на реальных примерах

В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки.

Для проекта Рецептов используем Webpack, JavaScript.

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

Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.

#frontend #patterns #adapter
2025/06/15 08:46:37
Back to Top
HTML Embed Code: