В этом видео мы подробно рассмотрим архитектуру 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
🔥24👍6💯2
Forwarded from Руслан Куянец | IT
Многие начинают свой путь в IT, думая, что достаточно выучить технологии и написать пару проектов, чтобы получить работу. Но реальность такова, что IT — это не просто про код. Это постоянный выход из зоны комфорта.
Если вы сидите и ждете, что вам придет приглашение на работу, то, возможно, так и будете сидеть долго. Мир IT требует от вас инициативы. Здесь важно не только техническое мастерство, но и умение себя подать, показать свою ценность. Вы должны быть активным участником сообщества, искать возможности, стучаться в двери, даже когда кажется, что они закрыты.
Коммуникации и адаптивность не менее важны, чем ваши навыки программирования. Умение презентовать себя на собеседованиях, понимать потребности бизнеса и эффективно взаимодействовать в команде — это те качества, которые работодатели ценят не меньше, чем знания JavaScript или React. Поэтому, если вы думаете, что вас должны звать на работу только потому, что вы закончили курсы или прошли стажировку, вы ошибаетесь.
Выход из зоны комфорта — это встречи с новыми людьми, участие в митапах, коллаборация с другими разработчиками, создание проектов, которые решают реальные проблемы. Это постоянное стремление стать лучше и открытость к изменениям.
Так что не ограничивайтесь только изучением технологий. Развивайтесь как личность, учитесь коммуницировать, берите на себя ответственность. IT — это комплексная сфера, где успех приходит к тем, кто готов преодолевать себя, учиться новому и показывать свою ценность.
Выходите за пределы своей зоны комфорта — и вы увидите, как открываются новые возможности!
Суббота и воскресенье даны для того, чтобы обойти тех, кто отдыхает. У тебя есть два дня преимущества. - Куянец Р.
#it #motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5❤2😁1💯1
Что интересно, сейчас я нахожусь в отпуске: отель 5 звезд с "всё включено", бассейн, спа, развлечения на любой вкус. Но, несмотря на это, я осознанно выбираю выделить 3-4 часа своего времени, чтобы участвовать в стриме. Это мой способ выйти из зоны комфорта. На протяжении всего отпуска я продолжаю работать над проектом YeaHub, созваниваться с учениками и готовить лекции. Это ещё один выход из зоны комфорта, который приближает меня к успеху.
А что вы делаете, чтобы достичь своих целей?👇👇👇
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥7❤3
Примерно такие достижения добавляют ученики после практики в 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…
🔥8👍2❤1💯1
YeaHub, уже скоро, но это не точно😅
Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея
До 4 ноября будем тестировать!
#yeahub
Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея
До 4 ноября будем тестировать!
#yeahub
👍13❤2🔥2
Какие проблемы вас ждут во время обучения и как их обойти?
Недавно выступал для студентов с докладом. Список проблем из видео:
🌧 Что учить? Так много технологий, как выбрать?
🌧 Я ничего не запоминаю, слишком много терминов
🌧 Я не могу понять тему
🌧 Я не могу писать код сам
🌧 Мой код не работает
🌧 Я застрял, не знаю, что учить дальше
🌧 Я теряю мотивацию и мне лень учиться
Будет полезно посмотреть для новичков. Начало с 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
👍9🔥2💯1
Организация кода с использованием классов в 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({ noscript: 'Новая задача', completed: false })
.then(todo => console.log('Создано:', todo))
.catch(error => console.error(error));
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍8💯2
- Инкапсуляция логики: Классы позволяют группировать связанные функции и данные вместе. В нашем примере ApiService отвечает только за HTTP-запросы, а TodoService — за управление задачами. Это разделение ответственности облегчает понимание и поддержку кода.
- Повторное использование кода: Общие методы, такие как get, post, put, delete в ApiService, могут быть использованы разными сервисами (не только TodoService). Это уменьшает дублирование кода и облегчает внесение изменений в одном месте.
- Удобство тестирования: Классы облегчают написание модульных тестов. Можно протестировать методы классов изолированно, замокав зависимости, такие как API-запросы.
- Масштабируемость: При росте приложения можно легко добавлять новые сервисы, наследуя или расширяя существующие классы. Это делает архитектуру приложения гибкой и устойчивой к изменениям.
- Поддержка и читаемость: Структурированный код легче читать и поддерживать, особенно в больших командах. Классы с четко определенными методами и назначением позволяют быстро понять, где искать нужную функциональность.
- Вынесение общих частей: Общие части, такие как базовый URL или заголовки запросов, можно определить в одном месте (ApiService), что упрощает их изменение и управление.
Использование классов для организации функциональности API и бизнес-логики способствует созданию чистой архитектуры, улучшает качество кода и облегчает дальнейшую разработку и поддержку приложения.
#frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤2🔥2🤔1
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
🔥14👍2❤1😢1
Компания: Ашан
Позиция: Middle
Вилка: От 260к
Вопросы:
❓ Что такое SEO и какие основные факторы влияют на его эффективность?
❓ Какие метатеги вы используете для оптимизации страниц и для чего они служат?
❓ Как правильно настроить метатеги для улучшения видимости сайта в поисковых системах?
❓ Что такое доступность веб-контента и почему она важна?
❓ Как используются атрибуты ARIA для улучшения доступности веб-приложений?
❓ Какие инструменты и методы вы применяете для обеспечения совместимости с экранными читалками?
❓ Что такое семантическая разметка и как она влияет на доступность?
❓ Как и когда использовать атрибут alt для изображений?
❓ Какие технологии верстки вы используете в своих проектах?
❓ Используете ли вы CSS-препроцессоры? Если да, то какие и почему?
❓ Что такое SCSS и какие преимущества он предоставляет по сравнению с обычным CSS?
❓ Что такое миксины в SCSS и для чего они используются?
❓ Как использование миксинов влияет на общий объем CSS и как вы справляетесь с увеличением кода?
❓ Как вы реализуете трехколоночную сетку с использованием CSS Grid?
❓ Как обеспечить перенос колонок при уменьшении ширины контейнера без использования медиазапросов, используя auto-fit или auto-fill?
❓ Что делать, если необходимо динамически менять количество колонок через пропсы в компоненте? Какие подходы вы используете (например, inline-стили, классы, переменные)?
❓ Объясните, как работает Event Loop в JavaScript.
❓ Какие способы клонирования объектов вы знаете и чем они отличаются?
❓ Какую структуру данных вы бы выбрали для сохранения порядка элементов и почему?
❓ Что такое WeakSet и WeakMap? В каких случаях их стоит использовать?
❓ Чем отличаются MutationObserver и IntersectionObserver? В каких сценариях применяются каждый из них?
❓ Что такое Proxy и Reflection в JavaScript? Приведите примеры их использования.
❓ Какие типы хранилищ существуют в браузере (например, LocalStorage, SessionStorage, IndexedDB)? В чем их основные отличия и области применения?
❓ Что такое CORS и как он работает? Как вы решаете проблемы, связанные с CORS в ваших проектах?
❓ Какие хуки существуют в React и для чего они используются?
❓ Расскажите подробнее о хуке useEffect. В чем разница между useEffect и useLayoutEffect?
❓ В чем отличие между хуками useReducer и useState? Когда стоит использовать каждый из них?
❓ Для чего используются хуки useMemo и useCallback? Как они помогают оптимизировать производительность?
❓ Как вы оптимизируете работу с большими списками данных в приложении? Что такое виртуализация списка и как она реализуется?
❓ Какие подходы вы используете для переопределения типов из библиотек в TypeScript (например, использование as never as SomeType)?
❓ Какие виды тестов существуют в разработке (юнит-тесты, интеграционные, e2e и т.д.)? Какой подход вы предпочитаете и почему?
❓ Какие методы вы используете для улучшения производительности веб-сайтов?
❓ Какие метрики производительности вы отслеживаете и как используете инструменты типа Lighthouse для их анализа и оптимизации?
#work #interview #frontend
Позиция: Middle
Вилка: От 260к
Вопросы:
А говорите, что не спрашивают базовые вопросы. В Ашан, кстати, нет этапа лайводинга. Скрининг -> Тех Собес -> Финал с Руководителем
#work #interview #frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🔥3
Паттерн Адаптер в JavaScript. Продвинутый Frontend на реальных примерах
В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки.
Для проекта Рецептов используем Webpack, JavaScript.
Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования.
Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #patterns #adapter
В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки.
Для проекта Рецептов используем Webpack, JavaScript.
Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования.
Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #patterns #adapter
🔥12❤5👍1
Разница между паттерном Адаптер и Маппер
Адаптер и Маппер — это два подхода, часто используемых для работы с несовместимыми интерфейсами или для преобразования данных между системами. Хотя они могут казаться похожими, их цели и применение немного отличаются.
➕ Адаптер (Adapter Pattern)
Паттерн Адаптер позволяет объектам с несовместимыми интерфейсами работать вместе. Он выступает в роли посредника, переводя один интерфейс в другой. Основное предназначение — это сделать два интерфейса совместимыми, не изменяя существующий код.
➕ Маппер (Mapper)
Маппер (или преобразователь) используется для преобразования данных из одного формата в другой. В отличие от адаптера, который сосредоточен на интерфейсах, маппер преобразует сами данные.
❓ Когда использовать:
💭 Для меня Адаптер — это способ адаптировать данные и методы, чтобы разные системы или компоненты могли работать вместе.
Маппер — это инструмент для преобразования данных в определённый формат. Например, если у нас есть разные сущности, но мы хотим сделать общий дропдаун, маппер преобразует данные так, чтобы они подходили для этого дропдауна. Это позволяет избежать дублирования кода.
#frontend #javanoscript #patterns
Адаптер и Маппер — это два подхода, часто используемых для работы с несовместимыми интерфейсами или для преобразования данных между системами. Хотя они могут казаться похожими, их цели и применение немного отличаются.
Паттерн Адаптер позволяет объектам с несовместимыми интерфейсами работать вместе. Он выступает в роли посредника, переводя один интерфейс в другой. Основное предназначение — это сделать два интерфейса совместимыми, не изменяя существующий код.
Маппер (или преобразователь) используется для преобразования данных из одного формата в другой. В отличие от адаптера, который сосредоточен на интерфейсах, маппер преобразует сами данные.
Адаптер - когда у вас есть два класса или интерфейса, которые должны работать вместе, но у них разные интерфейсы.
Маппер - когда вам нужно изменить структуру или формат данных для дальнейшей обработки.
Маппер — это инструмент для преобразования данных в определённый формат. Например, если у нас есть разные сущности, но мы хотим сделать общий дропдаун, маппер преобразует данные так, чтобы они подходили для этого дропдауна. Это позволяет избежать дублирования кода.
#frontend #javanoscript #patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥7💯2
🚨 Что такое Sentry и для чего он нужен?
Мониторинг фронтенд-приложений необходим для выявления и предотвращения ошибок, которые могут возникать у пользователей в реальном времени. Одним из популярных инструментов для этих целей является Sentry — платформа, которая собирает и анализирует ошибки, происходящие в приложении, и предоставляет информацию, необходимую для их устранения.
Sentry помогает отслеживать ошибки на стороне клиента. Он фиксирует стек-трейсы, дополнительные данные о состоянии приложения и окружении, а также отправляет уведомления, позволяя разработчикам оперативно узнавать о сбоях в системе. В итоге использование Sentry позволяет быстро реагировать на ошибки, устраняя их до того, как они негативно скажутся на пользователях.
🖥 Скрин 1: Интеграция Sentry в приложение. Возможность добавлять кастомные события, отслеживать сессии пользователей.
🖥 Скрин 2: Дашборд Sentry для отслеживания всех ошибок.
🖥 Скрин 3: Страница конкретной ошибки с подробной информацией, включая видео, как ошибка произошла у пользователя.
#frontend #react #yeahub #sentry
Мониторинг фронтенд-приложений необходим для выявления и предотвращения ошибок, которые могут возникать у пользователей в реальном времени. Одним из популярных инструментов для этих целей является Sentry — платформа, которая собирает и анализирует ошибки, происходящие в приложении, и предоставляет информацию, необходимую для их устранения.
Sentry помогает отслеживать ошибки на стороне клиента. Он фиксирует стек-трейсы, дополнительные данные о состоянии приложения и окружении, а также отправляет уведомления, позволяя разработчикам оперативно узнавать о сбоях в системе. В итоге использование Sentry позволяет быстро реагировать на ошибки, устраняя их до того, как они негативно скажутся на пользователях.
Сейчас работаю над интеграцией Sentry, Grafana и Prometheus в YeaHub. Когда релизим платформу, появится больше времени на создание контента. Будем делиться опытом и разбираться во всей архитектуре фронтенд-приложений.
#frontend #react #yeahub #sentry
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4💯3😁1
Многие разработчики, особенно новички, считают, что их код недостаточно хорош, и мечтают увидеть «настоящий сеньорский код», чтобы перенять оттуда секреты чистоты и мастерства. Но правды ради, такого особенного сеньорского кода не существует.
На самом деле, в каждой компании, и даже в твоем Пет-проекте, код похож. Компоненты они и в Африке компоненты. Научиться писать качественный код можно просто, следуя базовым принципам и простой логике, без мифических сеньорских стандартов.
Чем отличается код в больших компаниях от твоего небольшого проекта? В маленьком проекте меньше сущностей, проще структура, и поддерживать его легче. А вот в крупном проекте добавляются интеграции, компоненты, обработка ошибок, загрузчики и множество других деталей, которые усложняют работу над ним. За счёт этого код в больших компаниях выглядит более «загруженным» и сложным.
💡 Главные навыки, которые необходимы в реальной разработке, — это умение читать чужой код, разбираться в проекте и подстраиваться под командные требования.
Если хочется увидеть пример чистого кода, посмотри обучающее видео хорошего блогера, где он за час пишет ToDo-приложение. Это действительно хороший, простой код. Но как только начнется расширение функционала, появятся новые сложности, и писать чистый код станет гораздо труднее.
Я часто общаюсь с разработчиками из разных компаний, и многие, видя код в YeaHub, отмечают, что у нас он чище, чем в некоторых крупных корпорациях, таких как Сбер или Газпром. В погоне за релизом, мы немного испортили код, но после релиза начнем рефакторинг
Вот основные принципы хорошего кода:
💡 В 80% случаев хороший код — это не паттерны, а простая логика и внимание к деталям.
#frontend #react #senior
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥4💯3😁1
Хотя хуки являются современным способом работы с Redux, вы также можете использовать метод connect из библиотеки react-redux для подключения компонентов к Redux. Это более старый способ, но он по-прежнему широко используется и имеет свои преимущества.
// Компонент
const TodoList = ({ todos, addTodo, removeTodo }) => {
// some logic
return ();
};
// Определяем, какие данные из Redux store передать компоненту
const mapStateToProps = (state) => ({
todos: state.todos.todos,
});
// Определяем, какие действия передать компоненту
const mapDispatchToProps = {
addTodo,
removeTodo,
};
// Подключаем компонент к Redux
export default connect(mapStateToProps, mapDispatchToProps)(TodoList);
Делаю сейчас курс по Redux + Redux Toolkit + RTK Query и вспомнил, как раньше подключались компоненты. Блин, выглядит круто. Может снова так делать.😅
Кто помнит? Олды есть?
#redux #react
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥5🤝1
Redux основывается на нескольких ключевых принципах, которые помогают организовать и управлять состоянием приложения.
В Redux есть только одно общее хранилище, которое содержит все состояние приложения. Это облегчает управление состоянием и делает его предсказуемым.
Поскольку всё состояние хранится в одном месте, легче отследить изменения и управлять ими. Это позволяет избежать проблем с синхронизацией, которые могут возникнуть, если состояние хранится в разных местах.
const initialState = {
todos: [],
user: null,
};
// Всё состояние хранится в одном объекте
const state = {
todos: ['Задача 1', 'Задача 2'],
user: { name: 'Иван', age: 30 },
};
Единственным способом изменения состояния является отправка действия (action). Это гарантирует, что изменения состояния происходят только через определенные точки (actions), что делает их предсказуемыми.
Когда состояние приложения меняется, это происходит только через отправку действий. Это делает все изменения явными и отслеживаемыми.
// Действие для добавления задачи
const addTodo = (text) => ({
type: 'ADD_TODO',
payload: text,
});
// Изменение состояния только через действие
store.dispatch(addTodo('Новая задача'));
Редюсеры должны быть чистыми функциями. Это значит, что для одинаковых входных данных они всегда должны возвращать одинаковый результат, и они не должны изменять свои входные данные.
Чистые функции делают состояние предсказуемым и упрощают отладку. Они не имеют побочных эффектов и не влияют на внешние состояния.
const todoReducer = (state = initialState, action) => {
switch (action.type) {
case 'ADD_TODO':
return {
...state,
todos: [...state.todos, action.payload],
};
default:
return state; // Возвращаем новое состояние, не изменяя текущее
}
};
Поток данных в Redux всегда односторонний. Это означает, что данные передаются от состояния к представлению, и изменения состояния происходят только через действия.
Однонаправленный поток данных упрощает понимание, как данные перемещаются в приложении. Он делает отладку проще, поскольку вы всегда знаете, откуда приходят данные и как они изменяются.
// Пример потока данных
const mapStateToProps = (state) => ({
todos: state.todos,
});
// Компонент получает данные
const TodoList = ({ todos }) => (
<ul>
{todos.map((todo, index) => (
<li key={index}>{todo}</li>
))}
</ul>
);
// Связываем компонент с Redux
export default connect(mapStateToProps)(TodoList);
#redux #frontend #react #flux
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥6❤5😁1💯1