en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Руслан Куянец | Reactify

Руслан Куянец | Reactify

Open in Telegram

Я IT-специалист, ментор и основатель проекта YeaHub и сообщества Reactify. Здесь рассказываю про Frontend и IT. Менторство: https://reactify.ru YouTube канал: https://youtube.com/@reactify-it YeaHub: https://yeahub.ru/ Связь: @ruslan_kuyanets

Show more
6 406
Subscribers
-424 hours
-107 days
-5230 days
Posts Archive
👩‍💻 Принципы Redux Redux основывается на нескольких ключевых принципах, которые помогают организовать и управлять состоянием приложения. 🔒 Единое хранилище (Single Source of Truth) В Redux есть только одно общее хранилище, которое содержит все состояние приложения. Это облегчает управление состоянием и делает его предсказуемым. Поскольку всё состояние хранится в одном месте, легче отследить изменения и управлять ими. Это позволяет избежать проблем с синхронизацией, которые могут возникнуть, если состояние хранится в разных местах.

const initialState = {
    todos: [],
    user: null,
};

// Всё состояние хранится в одном объекте
const state = {
    todos: ['Задача 1', 'Задача 2'],
    user: { name: 'Иван', age: 30 },
};
👀 Состояние только для чтения (Read-Only State) Единственным способом изменения состояния является отправка действия (action). Это гарантирует, что изменения состояния происходят только через определенные точки (actions), что делает их предсказуемыми. Когда состояние приложения меняется, это происходит только через отправку действий. Это делает все изменения явными и отслеживаемыми.

// Действие для добавления задачи
const addTodo = (text) => ({
    type: 'ADD_TODO',
    payload: text,
});

// Изменение состояния только через действие
store.dispatch(addTodo('Новая задача'));
✨ Чистые функции редюсеры (Pure Functions) Редюсеры должны быть чистыми функциями. Это значит, что для одинаковых входных данных они всегда должны возвращать одинаковый результат, и они не должны изменять свои входные данные. Чистые функции делают состояние предсказуемым и упрощают отладку. Они не имеют побочных эффектов и не влияют на внешние состояния.

const todoReducer = (state = initialState, action) => {
    switch (action.type) {
        case 'ADD_TODO':
            return {
                ...state,
                todos: [...state.todos, action.payload],
            };
        default:
            return state; // Возвращаем новое состояние, не изменяя текущее
    }
};
⬇️ Однонаправленный поток данных (Unidirectional Data Flow) Поток данных в 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

👩‍💻 Подключение компонента с помощью connect Хотя хуки являются современным способом работы с 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

🛍 Скидка на менторство 10% до 1 ноября Все больше моих учеников получают офферы, и их успехи подтверждают эффективность моег
🛍 Скидка на менторство 10% до 1 ноября Все больше моих учеников получают офферы, и их успехи подтверждают эффективность моего менторства. Что входит в программу: ✔️ Реальная практика на проекте ✔️ Обучение с любого уровня до первого трудоустройства ✔️ Индивидуальный подход и четкий план развития ✔️ До 5 созвонов в неделю для обсуждения вопросов, код-ревью и поддержки ✔️ Доступ к обширной базе знаний: лекции, задачи, гайды, митапы и сообщество единомышленников Полное сопровождение до трудоустройства включено в стоимость — без переплат и скрытых платежей. Предстоящие изменения: В ноябре/декабре планирую поднять стоимость, но пока предлагаю одно из самых доступных менторских обучений. Я постоянно обновляю программу, записываю видео и создаю гайды для менти, чтобы повысить качество обучения. Смена профессии — это реальность, и зарплата от 150к тоже реальна. Все зависит только от вас. Я буду рядом на каждом этапе: помогу понять сложные темы, поддержу и замотивирую. На данный момент это лучшее предложение, которое поможет вам стать востребованным специалистом и выйти на достойный уровень дохода. Я — за качество обучения. Скидка не распространяется на рассрочку.

🥸 О мифе сеньорского кода и чистоте разработки Многие разработчики, особенно новички, считают, что их код недостаточно хорош, и мечтают увидеть «настоящий сеньорский код», чтобы перенять оттуда секреты чистоты и мастерства. Но правды ради, такого особенного сеньорского кода не существует. На самом деле, в каждой компании, и даже в твоем Пет-проекте, код похож. Компоненты они и в Африке компоненты. Научиться писать качественный код можно просто, следуя базовым принципам и простой логике, без мифических сеньорских стандартов. Чем отличается код в больших компаниях от твоего небольшого проекта? В маленьком проекте меньше сущностей, проще структура, и поддерживать его легче. А вот в крупном проекте добавляются интеграции, компоненты, обработка ошибок, загрузчики и множество других деталей, которые усложняют работу над ним. За счёт этого код в больших компаниях выглядит более «загруженным» и сложным.
💡 Главные навыки, которые необходимы в реальной разработке, — это умение читать чужой код, разбираться в проекте и подстраиваться под командные требования.
Если хочется увидеть пример чистого кода, посмотри обучающее видео хорошего блогера, где он за час пишет ToDo-приложение. Это действительно хороший, простой код. Но как только начнется расширение функционала, появятся новые сложности, и писать чистый код станет гораздо труднее. Я часто общаюсь с разработчиками из разных компаний, и многие, видя код в YeaHub, отмечают, что у нас он чище, чем в некоторых крупных корпорациях, таких как Сбер или Газпром. В погоне за релизом, мы немного испортили код, но после релиза начнем рефакторинг Вот основные принципы хорошего кода: ✏️ Декомпозиция: разбивайте код на более мелкие, логичные части. Это упрощает понимание, отладку и позволяет использовать код повторно. ✏️ Разделяйте ответственность: каждая функция, компонент или модуль должны выполнять одну конкретную задачу. Это делает код более предсказуемым и простым в поддержке. ✏️ Избегайте дублирования кода: если встречаете повторяющиеся блоки, вынесите их в отдельные функции или компоненты. Это упростит изменения и уменьшит количество ошибок. ✏️ Логически определяйте блоки кода и сущности: структурируйте код так, чтобы каждая его часть занималась своей ролью. Например, обработку данных выделяйте отдельно от их отображения. ✏️ Создавайте компоненты для переиспользования: разрабатывайте компоненты так, чтобы их можно было использовать в разных частях приложения. Это уменьшит дублирование и улучшит масштабируемость. ✏️ Делайте компоненты модифицируемыми: при разработке учитывайте возможность добавления новой функциональности без изменения уже существующего кода. Это упростит поддержку и добавление новых фич. ✏️ Избегайте жесткой связанности модулей: минимизируйте зависимости между модулями. Если один компонент сильно зависит от другого, это усложнит поддержку и тестирование. Используйте инъекцию зависимостей и интерфейсы для уменьшения связанности.
💡 В 80% случаев хороший код — это не паттерны, а простая логика и внимание к деталям.
#frontend #react #senior

🚨 Что такое Sentry и для чего он нужен? Мониторинг фронтенд-приложений необходим для выявления и предотвращения ошибок, кото
+2
🚨 Что такое Sentry и для чего он нужен? Мониторинг фронтенд-приложений необходим для выявления и предотвращения ошибок, которые могут возникать у пользователей в реальном времени. Одним из популярных инструментов для этих целей является Sentry — платформа, которая собирает и анализирует ошибки, происходящие в приложении, и предоставляет информацию, необходимую для их устранения. Sentry помогает отслеживать ошибки на стороне клиента. Он фиксирует стек-трейсы, дополнительные данные о состоянии приложения и окружении, а также отправляет уведомления, позволяя разработчикам оперативно узнавать о сбоях в системе. В итоге использование Sentry позволяет быстро реагировать на ошибки, устраняя их до того, как они негативно скажутся на пользователях. 🖥 Скрин 1: Интеграция Sentry в приложение. Возможность добавлять кастомные события, отслеживать сессии пользователей. 🖥 Скрин 2: Дашборд Sentry для отслеживания всех ошибок. 🖥 Скрин 3: Страница конкретной ошибки с подробной информацией, включая видео, как ошибка произошла у пользователя.
Сейчас работаю над интеграцией Sentry, Grafana и Prometheus в YeaHub. Когда релизим платформу, появится больше времени на создание контента. Будем делиться опытом и разбираться во всей архитектуре фронтенд-приложений.
#frontend #react #yeahub #sentry

Разница между паттерном Адаптер и Маппер Адаптер и Маппер — это два подхода, часто используемых для работы с несовместимыми и
+1
Разница между паттерном Адаптер и Маппер Адаптер и Маппер — это два подхода, часто используемых для работы с несовместимыми интерфейсами или для преобразования данных между системами. Хотя они могут казаться похожими, их цели и применение немного отличаются. ➕ Адаптер (Adapter Pattern) Паттерн Адаптер позволяет объектам с несовместимыми интерфейсами работать вместе. Он выступает в роли посредника, переводя один интерфейс в другой. Основное предназначение — это сделать два интерфейса совместимыми, не изменяя существующий код. ➕ Маппер (Mapper) Маппер (или преобразователь) используется для преобразования данных из одного формата в другой. В отличие от адаптера, который сосредоточен на интерфейсах, маппер преобразует сами данные. ❓ Когда использовать:
Адаптер - когда у вас есть два класса или интерфейса, которые должны работать вместе, но у них разные интерфейсы. Маппер - когда вам нужно изменить структуру или формат данных для дальнейшей обработки.
💭 Для меня Адаптер — это способ адаптировать данные и методы, чтобы разные системы или компоненты могли работать вместе. Маппер — это инструмент для преобразования данных в определённый формат. Например, если у нас есть разные сущности, но мы хотим сделать общий дропдаун, маппер преобразует данные так, чтобы они подходили для этого дропдауна. Это позволяет избежать дублирования кода. #frontend #javascript #patterns

Паттерн Адаптер в JavaScript. Продвинутый Frontend на реальных примерах В этом видео мы рассмотрим Паттерн Адаптер (Adapter)
Паттерн Адаптер в JavaScript. Продвинутый Frontend на реальных примерах В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки. Для проекта Рецептов используем Webpack, JavaScript. Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования. Видео уже на канале! Пятая серия видеокурса Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение. #frontend #patterns #adapter

Компания: Ашан Позиция: 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

Repost from N/a
✉️ YeaHub объединяет IT-специалистов. YeaHub — это IT-платформа, предоставляющая разнообразные сервисы для профессионального развития специалистов в сфере информационных технологий. Платформа включает в себя функции для карьеры, обучения, менторства, собеседований и участия в конференциях и соревнованиях. Пользователи могут создавать профессиональные профили, публиковать статьи, общаться и обмениваться опытом с другими специалистами, а также участвовать в мероприятиях и проектах. Верификация знаний гарантирует, что все участники являются квалифицированными профессионалами. Доступ к сервисам платформы бесплатен для активных участников сообщества. YeaHub стремится к взаимной поддержке и совместному росту в динамично меняющемся мире IT. Мы стремимся создать центральное место и единую точку входа в мир IT, охватывая все сферы: обучение, развитие, карьеру, общение и личный брендинг. Это будет социальная сеть, специально разработанная для IT-специалистов. В первую очередь мы реализуем сервисы для обучения и развития, включая: ✔️ Проверку знаний и подготовку к собеседованиям ✔️ Платформу для публикации и чтения статей ✔️ Сервис для анонсирования и участия в мероприятиях в IT ✔️ Полный roadmap по всем профессиям в области технологий В дальнейшем мы планируем запустить более 20 дополнительных сервисов. Главная особенность нашей платформы заключается в едином профиле, который будет отображать всю активность пользователя в IT: количество написанных статей, имеющиеся навыки, посещенные мероприятия и многое другое. Первый сервис уже успешно запущен для учеников, которые готовятся к собеседованиям, одновременно выявляя ошибки и предоставляя обратную связь. #yeahub

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

Организация кода с использованием классов в 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));

Какие проблемы вас ждут во время обучения и как их обойти? Недавно выступал для студентов с докладом. Список проблем из видео: 🌧 Что учить? Так много технологий, как выбрать? 🌧 Я ничего не запоминаю, слишком много терминов 🌧 Я не могу понять тему 🌧 Я не могу писать код сам 🌧 Мой код не работает 🌧 Я застрял, не знаю, что учить дальше 🌧 Я теряю мотивацию и мне лень учиться Будет полезно посмотреть для новичков. Начало с 48:40 минуты https://boosty.to/m0rtymerr/posts/b82357bd-fa1b-4f6d-8205-6acf9ed92f91?share=post_link

YeaHub, уже скоро, но это не точно😅 Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея До 4 ноября будем те
YeaHub, уже скоро, но это не точно😅 Скоро сделаю пост о платформе YeaHub. Расскажу, что это, какая идея До 4 ноября будем тестировать! #yeahub

🛡 Пример сильных достижений в ваше резюме. Примерно такие достижения добавляют ученики после практики в 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 с реальными кейсами, а не выдуманными из головы. 👍 Полный гайд по резюме есть тут - ГАЙД В НОУШЕН

👍 Сегодня я выступаю на стриме для студентов технических вузов с сообществом "Осознанная Меркантильность". Тема: "Какие проб
+2
👍 Сегодня я выступаю на стриме для студентов технических вузов с сообществом "Осознанная Меркантильность". Тема: "Какие проблемы вас ждут во время обучения и как их обойти". Честно говоря, у меня до сих пор есть страх публичных выступлений — стеснение и нервозность всё ещё со мной. Что интересно, сейчас я нахожусь в отпуске: отель 5 звезд с "всё включено", бассейн, спа, развлечения на любой вкус. Но, несмотря на это, я осознанно выбираю выделить 3-4 часа своего времени, чтобы участвовать в стриме. Это мой способ выйти из зоны комфорта. На протяжении всего отпуска я продолжаю работать над проектом YeaHub, созваниваться с учениками и готовить лекции. Это ещё один выход из зоны комфорта, который приближает меня к успеху. А что вы делаете, чтобы достичь своих целей?👇👇👇

Repost from N/a
🌧 Зона комфорта Многие начинают свой путь в IT, думая, что достаточно выучить технологии и написать пару проектов, чтобы пол
🌧 Зона комфорта Многие начинают свой путь в IT, думая, что достаточно выучить технологии и написать пару проектов, чтобы получить работу. Но реальность такова, что IT — это не просто про код. Это постоянный выход из зоны комфорта. Если вы сидите и ждете, что вам придет приглашение на работу, то, возможно, так и будете сидеть долго. Мир IT требует от вас инициативы. Здесь важно не только техническое мастерство, но и умение себя подать, показать свою ценность. Вы должны быть активным участником сообщества, искать возможности, стучаться в двери, даже когда кажется, что они закрыты. Коммуникации и адаптивность не менее важны, чем ваши навыки программирования. Умение презентовать себя на собеседованиях, понимать потребности бизнеса и эффективно взаимодействовать в команде — это те качества, которые работодатели ценят не меньше, чем знания JavaScript или React. Поэтому, если вы думаете, что вас должны звать на работу только потому, что вы закончили курсы или прошли стажировку, вы ошибаетесь. Выход из зоны комфорта — это встречи с новыми людьми, участие в митапах, коллаборация с другими разработчиками, создание проектов, которые решают реальные проблемы. Это постоянное стремление стать лучше и открытость к изменениям. Так что не ограничивайтесь только изучением технологий. Развивайтесь как личность, учитесь коммуницировать, берите на себя ответственность. IT — это комплексная сфера, где успех приходит к тем, кто готов преодолевать себя, учиться новому и показывать свою ценность. Выходите за пределы своей зоны комфорта — и вы увидите, как открываются новые возможности!
Суббота и воскресенье даны для того, чтобы обойти тех, кто отдыхает. У тебя есть два дня преимущества. - Куянец Р.
#it #motivation

👩‍💻 Архитектура Frontend с Нуля до Продакшена. Docker, Webpack, CI/CD, React, Deploy В этом видео мы подробно рассмотрим ар
+1
👩‍💻 Архитектура Frontend с Нуля до Продакшена. Docker, Webpack, CI/CD, React, Deploy В этом видео мы подробно рассмотрим архитектуру Frontend-приложений, начиная с технологий и инструментов, заканчивая настройками и деплоем. Это будет комплексный обзор всех ключевых компонентов архитектуры: React, Redux, Storybook, Webpack, Docker, Nginx, CI/CD и других технологий. В следующих видео мы детально разберем каждую технологию по отдельности и начнем пошаговое создание собственного приложения с нуля. Этого видео мне не хватало, когда я с нуля создавал приложения. Сколько боли было в поиске информации. Рад, что многим это видео полезно. 🔗 Вы знаете, как с пользой провести выходные: ВИДЕО #frontend

Привет всем! За последние 6 месяцев в сообществе ОМ я многое переосмыслил и понял одну важную вещь На рынке каждый борется за свои интересы, и компании — не исключение. У них есть ресурсы и свои уловки, и они используют их в полную силу. Почему ты должен ограничивать себя? Если они оптимизируют процессы, манипулируют данными и фильтруют резюме, то и ты имеешь полное право использовать все доступные инструменты: адаптируй резюме, готовься к собеседованиям, и если надо — накручивай опыт, чтобы пройти фильтры. 📌 Конкуренция — это норма: Если ты не борешься за своё место, тебя обходят другие. Компании делают всё, чтобы держать тебя в неведении, манипулируя предложениями и скрывая реальную причину отказа. Это рынок: либо ты играешь в полную силу, либо остаёшься без работы. 📌 Ты — такой же игрок: Ты имеешь право выбирать лучшие условия, бороться за свои интересы и не чувствовать себя виноватым. Ведь если работодатели могут увольнять и менять правила игры, ты тоже должен быть готов действовать в свою пользу. 🔗 ВСЕ УЛОВКИ КОМПАНИЙ Сообщество прокачало меня, дало много знаний и возможностей, которые я применяю для прокачки и трудоустройства учеников. Но важно понимать: ОМ не учит халяве и безделью. Здесь не про то, чтобы накрутить опыт, влезть на мидла и сидеть без дела. В сообществе призывают к трудолюбию — чтобы подготовиться, нужно реально много работать над собой. ОМ учит ценить себя и своё время. Никакой работы ради «опыта» и печенек. Ты работаешь — ты получаешь достойную оплату. В комьюнити есть гайды, чаты, ресурсы — всё, чтобы ты мог расти и добиваться своих целей. В это воскресенье (6 октября) подписки для новых участников закроются на неопределённое время. Если хочешь попасть — не пропусти. 🔗 ТУТ ОПИСАНЫ ВСЕ БОНУСЫ 🔗 ФИЛОСОФИЯ СООБЩЕСТВА
ИТ — это не только про технологии и кодирование. Это умение общаться, адаптироваться и взаимодействовать. Эти навыки важны в каждой сфере, поэтому развивайтесь всесторонне!
В комментариях я добавлю ссылку на пробную подписку на 3 дня. За это время вы сможете изучить материалы по созданию резюме, подготовке к собеседованиям, развитию софт-скиллов и многому другому. Если вам понравится, будет возможность оформить полноценную подписку.

🖥 Управление состоянием с помощью паттерна Observer Когда приложение разрастается, работа с состоянием через обычные глобальные переменные становится непрактичной и приводит к хаосу. Чтобы избежать этого, важно использовать более структурированные подходы, такие как паттерн Observer. Он помогает разделить логику обновления и реакцию на изменения, что делает код более гибким и легко масштабируемым. Рассмотрим, как создать и использовать простую реализацию этого паттерна для управления состоянием. ✏️ Создание Observable В отдельном файле создадим функцию, которая будет хранить состояние и управлять подписчиками. Назовем её createObservable:

// observable.js
export const createObservable = (initialState = []) => {
  let state = initialState;
  let observers = [];

  // Метод для уведомления всех подписчиков об изменениях
  const notify = () => {
    observers.forEach((observer) => observer(state));
  };

  return {
    // Метод для подписки на изменения
    subscribe: (observer) => {
      observers = [...observers, observer];
    },
    // Метод для отмены подписки
    unsubscribe: (observer) => {
      observers = observers.filter((obs) => obs !== observer);
    },
    // Метод для изменения состояния и уведомления подписчиков
    setState: (newState) => {
      state = newState;
      notify();
    },
    // Метод для получения текущего состояния
    getState: () => state,
  };
};
💭 Создание хранилища (Store) Теперь вместо использования обычного массива, создадим состояние для списка фильмов, используя наш createObservable. Это позволит нам централизованно управлять состоянием и уведомлять подписчиков об изменениях.

// store.js
import { createObservable } from './observable';

const moviesObservable = createObservable([]);
⌛️ Добавление данных в хранилище Теперь предположим, что вы загружаете данные о фильмах с API:

const fetchMovies = async (query) => {
  const response = await fetch(`https://api.example.com/movies?search=${query}`);
  const movies = await response.json();
  return movies;
};

// Получаем фильмы и обновляем состояние хранилища
const moviesFromApi = await fetchMovies('Inception');

moviesObservable.setState(moviesFromApi); // Теперь в хранилище у нас массив фильмов
✉️ Подписка на изменения Когда состояние изменится, нам нужно автоматически отобразить новые данные. Например, создадим функцию displayMovies, которая будет выводить фильмы на экран, и подпишем её на наш moviesObservable:

const displayMovies = (movies) => {
  console.log('Фильмы обновились:', movies);
};

// Подписываемся на изменения в состоянии хранилища
moviesObservable.subscribe(displayMovies);
Теперь каждый раз, когда состояние хранилища изменяется через setState, функция displayMovies будет автоматически вызываться с обновлёнными данными. 🔔 Получение текущего состояния Для доступа к текущим данным из хранилища можно использовать метод getState:

const currentMovies = moviesObservable.getState();
console.log('Текущие фильмы:', currentMovies);
Преимущества использования паттерна Observer: - Централизованное управление состоянием — вся логика управления данными сосредоточена в одном месте. - Гибкость — вы можете легко добавлять новые подписки или отменять их при необходимости. - Простота тестирования — можно отдельно тестировать логику хранилища и взаимодействие с подписчиками. - Отделение состояния от представления — подписчики отвечают только за реакцию на изменения, а само хранилище не зависит от реализации компонентов интерфейса.
Этот паттерн можно легко расширить на более сложные состояния: добавить возможность частичного обновления состояния, реализовать логику редукторов для обновления состояния в зависимости от действий, подключить несколько таких хранилищ и организовать обмен данными между ними.
Использование паттерна Observer — это хорошая база для перехода к более сложным инструментам управления состоянием, таким как Redux или MobX. #javascript #store #observer

🔝 Митап по Feature-Sliced Design (FSD) Сегодня я буду проводить митап для учеников, посвященный Feature-Sliced Design (FSD).
+1
🔝 Митап по Feature-Sliced Design (FSD) Сегодня я буду проводить митап для учеников, посвященный Feature-Sliced Design (FSD). На онлайн-сессии разберем структуру страницы приложения, детализируя её на слои, срезы и сегменты. Покажу, как декомпозировать проект на бизнес-сущности и правильно организовать файловую структуру. Мы не только разложим все по полочкам, но и рассмотрим принципы, правила и реальные лайфхаки для обхода возможных сложностей при использовании FSD. Многие новички сталкиваются с трудностями, когда начинают изучать FSD, потому что подход кажется излишне формальным. Но на деле — это мощный инструмент, который помогает мыслить категориями бизнес-сущностей, учит декомпозиции и грамотному управлению зависимостями. FSD формирует четкое представление о модульности и структурирует понимание архитектуры приложения. Разбирая FSD, разработчики также постигают ключевые принципы проектирования и шаблоны, которые полезны для любых типов проектов. 📌 Принципы и паттерны, которые помогают понять FSD: ✔️ Принцип единственной ответственности (Single Responsibility Principle): каждый срез отвечает только за одну конкретную задачу или сущность. ✔️ Разделение областей видимости (Separation of Concerns): логика и представление четко изолированы по слоям. ✔️ Принцип инверсии зависимостей (Dependency Inversion Principle): верхние уровни приложения зависят только от интерфейсов или контрактов нижних слоев. ✔️ Open/Closed Principle: компоненты и срезы легко расширяются, но сложно модифицируются, что улучшает устойчивость к изменениям. ✔️ Композиция вместо наследования (Composition over Inheritance): через FSD можно легко композировать логику и компоненты без сложных иерархий. ✔️ Чистая архитектура (Clean Architecture): соблюдается иерархия и направленные зависимости. ✔️ Декомпозиция и агрегация: декомпозируя сущности, мы создаем более мелкие и независимые модули, которые затем агрегируются в более сложные структуры.
Понимание FSD — это не просто изучение очередной структуры папок. Это освоение принципов проектирования, которые позволяют создавать поддерживаемые, расширяемые и надежные приложения. Поэтому FSD — это отличный выбор для разработчиков, стремящихся к более глубокому пониманию архитектуры и построению качественных приложений.
#frontend #fsd #react