В React рендеринг — это процесс, при котором компонент заново отрисовывается на основе новых данных. Этот процесс происходит по нескольким причинам:
Если состояние компонента меняется, React автоматически запускает его ререндеринг. Например:
const CounterButton = () => {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Click me {count} times
</button>
);
};
Когда мы вызываем setCount, значение count меняется, что приводит к ререндерингу компонента, чтобы отобразить обновлённое число.
Пропсы сами по себе не являются первичной причиной ререндеринга, а скорее следствием изменения состояния в родительском компоненте. Если состояние родителя обновляется, он перерисовывается и передает изменённые пропсы дочернему компоненту. Это приводит к ререндерингу дочернего компонента:
// Родительский компонент
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 изменения пропсов действительно считаются причиной ререндеринга, если новый пропс отличается от предыдущего.
Если компонент использует контекст (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 ререндерится, чтобы отобразить новое значение темы.
Даже если состояние компонента и его пропсы остаются неизменными, он будет перерисован, если родительский компонент ререндерится (даже без видимых изменений). Это связано с тем, что дочерние компоненты автоматически ререндерятся вместе с родительским компонентом. Например:
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 #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
Для кого это:
- Для тех, кто готов вложиться в проект, но не может найти работу.
- Для тех, кто не хочет "накручивать" опыт, а реально хочет поработать в команде и получить ценный опыт.
Что они предлагают:
- Избежать ошибок новичков — научат запускать проекты с минимальными ресурсами.
- Возможность запустить пет-проект, который станет отличной строкой в резюме.
- Работа в сильной команде: полный цикл разработки от идеи до релиза.
- Обмен опытом с профессионалами в разработке, аналитике, инфраструктуре и маркетинге.
- Шанс создать свой успешный стартап.
- В этом сезоне принимаются новички без коммерческого опыта, но с опытом работы над собственными проектами и желанием развиваться в стартапах.
- При высокой вовлечённости и прогрессе возможно получение финансовой поддержки уже после второго спринта (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
В этом видео мы подробно рассмотрим архитектуру 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
Forwarded from Руслан Куянец | IT
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.
Что тут есть?
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
Telegram
Менторство Reactify
Гайд по Frontend Разработке
Бесплатное руководство для тех, кто хочет освоить Frontend и найти работу. Внутри вы найдете:
✔️ Подробный Roadmap для изучения Frontend
✔️ Топ-10 вопросов о вашем опыте и проектах
✔️ Топ-10 вопросов по soft-skills
✔️ Топ 32…
Бесплатное руководство для тех, кто хочет освоить Frontend и найти работу. Внутри вы найдете:
✔️ Подробный Roadmap для изучения Frontend
✔️ Топ-10 вопросов о вашем опыте и проектах
✔️ Топ-10 вопросов по soft-skills
✔️ Топ 32…
YeaHub, уже скоро, но это не точно😅
Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея
До 4 ноября будем тестировать!
#yeahub
Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея
До 4 ноября будем тестировать!
#yeahub
Какие проблемы вас ждут во время обучения и как их обойти?
Недавно выступал для студентов с докладом. Список проблем из видео:
🌧 Что учить? Так много технологий, как выбрать?
🌧 Я ничего не запоминаю, слишком много терминов
🌧 Я не могу понять тему
🌧 Я не могу писать код сам
🌧 Мой код не работает
🌧 Я застрял, не знаю, что учить дальше
🌧 Я теряю мотивацию и мне лень учиться
Будет полезно посмотреть для новичков. Начало с 48:40 минуты
https://boosty.to/m0rtymerr/posts/b82357bd-fa1b-4f6d-8205-6acf9ed92f91?share=post_link
Недавно выступал для студентов с докладом. Список проблем из видео:
Будет полезно посмотреть для новичков. Начало с 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
boosty.to
День открытых дверей в IT - Осознанная Меркантильность | Антон Назаров
Posted on Oct 08 2024
Организация кода с использованием классов в JavaScript
Организация кода с использованием классов в JavaScript позволяет структурировать функциональность приложения, делая его более читаемым, поддерживаемым и масштабируемым. Рассмотрим два примера классов: один для управления API-запросами, другой для работы с задачами TODO.
⌛️ Класс для организации API-запросов
Этот класс будет отвечать за выполнение HTTP-запросов к различным конечным точкам API. Он может содержать методы для GET, POST, PUT, DELETE и других типов запросов, а также обрабатывать общие параметры, такие как заголовки и обработка ошибок.
🖥 Класс для работы с TODO
Этот класс будет использовать ApiService для взаимодействия с сервером и управлять задачами TODO. Он будет включать методы для создания, получения, обновления и удаления задач.
✔️ Пример использования
Организация кода с использованием классов в JavaScript позволяет структурировать функциональность приложения, делая его более читаемым, поддерживаемым и масштабируемым. Рассмотрим два примера классов: один для управления API-запросами, другой для работы с задачами TODO.
Этот класс будет отвечать за выполнение 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);
}
}
Этот класс будет использовать 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
Forwarded from Руслан Куянец | IT
Media is too big
VIEW IN TELEGRAM
YeaHub — это IT-платформа, предоставляющая разнообразные сервисы для профессионального развития специалистов в сфере информационных технологий. Платформа включает в себя функции для карьеры, обучения, менторства, собеседований и участия в конференциях и соревнованиях.
Пользователи могут создавать профессиональные профили, публиковать статьи, общаться и обмениваться опытом с другими специалистами, а также участвовать в мероприятиях и проектах. Верификация знаний гарантирует, что все участники являются квалифицированными профессионалами. Доступ к сервисам платформы бесплатен для активных участников сообщества. YeaHub стремится к взаимной поддержке и совместному росту в динамично меняющемся мире IT.
Мы стремимся создать центральное место и единую точку входа в мир IT, охватывая все сферы: обучение, развитие, карьеру, общение и личный брендинг. Это будет социальная сеть, специально разработанная для IT-специалистов.
В первую очередь мы реализуем сервисы для обучения и развития, включая:
В дальнейшем мы планируем запустить более 20 дополнительных сервисов. Главная особенность нашей платформы заключается в едином профиле, который будет отображать всю активность пользователя в IT: количество написанных статей, имеющиеся навыки, посещенные мероприятия и многое другое.
Первый сервис уже успешно запущен для учеников, которые готовятся к собеседованиям, одновременно выявляя ошибки и предоставляя обратную связь.
#yeahub
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн Адаптер в JavaScript. Продвинутый Frontend на реальных примерах
В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки.
Для проекта Рецептов используем Webpack, JavaScript.
Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования.
Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #patterns #adapter
В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки.
Для проекта Рецептов используем Webpack, JavaScript.
Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования.
Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #patterns #adapter