Канал для подготовки к собеседованиям по фронтенду Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront Менеджер по рекламе: @Spiral_Yuri Купить рекламу: https://telega.in/c/frontendinterview Номер заявления в РКН № 4959045795
Что нужно сделать, чтобы поменять данные в хранилище redux?
Чтобы изменить данные, нужно выполнить несколько шагов: создать действие (action), определить редюсер (reducer), который будет обрабатывать это действие и обновлять состояние, и затем отправить действие (dispatch action) в хранилище. Рассмотрим эти шаги более подробно.
Шаги для изменения данных в хранилище:
Создание действия (action)
Это объект, который описывает, что должно произойти. Он должен содержать как минимум свойство type
, которое указывает на тип действия. Дополнительно можно добавить любые данные, которые нужны для обновления состояния.
// actions.js
export const increment = () => ({
type: 'INCREMENT',
});
export const decrement = () => ({
type: 'DECREMENT',
});
export const setValue = (value) => ({
type: 'SET_VALUE',
payload: value,
});
// reducer.js
const initialState = {
count: 0,
};
const counterReducer = (state = initialState, action) => {
switch (action.type) {
case 'INCREMENT':
return {
...state,
count: state.count + 1,
};
case 'DECREMENT':
return {
...state,
count: state.count - 1,
};
case 'SET_VALUE':
return {
...state,
count: action.payload,
};
default:
return state;
}
};
export default counterReducer;
createStore
из библиотеки Redux. Хранилище объединяет редюсеры и обеспечивает централизованное управление состоянием.// store.js
import { createStore } from 'redux';
import counterReducer from './reducer';
const store = createStore(counterReducer);
export default store;
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import App from './App';
import store from './store';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
useSelector
и useDispatch
из библиотеки react-redux
.// App.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement, setValue } from './actions';
const App = () => {
const count = useSelector(state => state.count);
const dispatch = useDispatch();
return (
<div>
<h1>Counter: {count}</h1>
<button onClick={() => dispatch(increment())}>Increment</button>
<button onClick={() => dispatch(decrement())}>Decrement</button>
<button onClick={() => dispatch(setValue(10))}>Set to 10</button>
</div>
);
};
export default App;
Testing 1-2-3
Напишите функцию, которая принимает массив строк и возвращает каждую строку, дополненную нужным номером
Нумерация начинается с 1. Обратите внимание на двоеточие и пробел между ними
Пример:
[] --> []
["a", "b", "c"] --> ["1: a", "2: b", "3: c"]
Концептуальные офисы в БЦ RUNOVSKY 14
Концептуальное офисное пространство для работы, расположенное в историческом центре Москвы в районе Замоскворечье. Проект имеет свой неповторимый характер. Переосмысление стиля ар-деко нашло свое отражение в черных фасадах с арочным остеклением.
БЦ находится в 2 минутах ходьбы от метро "Новокузнецкая", через которую проходят основные пешие маршруты до Третьяковской галереи, парка Зарядья и Московкского Кремля.
Проектом предусмотрено большое количество планировочных решений офисов площадью от 27 м2 с возможностью объединения смежных помещений.
Тех, кто решит купить лот в "RUNOVSKY 14", ждет премиальный сервис, безопасность и комфортная атмосфера.
Перейти на сайт
#реклама
зиккурат.рф
О рекламодателе
📶 С 1 декабря для граждан РФ открыт доступ к платным материалам по программированию
Вот отсортированные базы с тонной материала(книги, курсы, ресурсы и гайды). Выбирай своё направление::
👩💻 Frontend 👩💻 PHP
⚙️ Backend 👩💻 Моб. Dev
📱 GitHub 👩💻 GameDev
🤓 Всё айти 👩💻 DevOps
👩💻 Python 🖥 Data Science
👩💻 Java 🐞 Тестирование
👩💻 C# 🤔 Хакинг & ИБ
👩💻 С/С++ 📱 Маркетинг
🖥 SQL 🖥 Дизайн
👩💻 Golang 👣 Rust
Скачивать ничего не нужно — все выложили в Telegram с доступом по ссылке
Ищем новичков во фронтенд-разработке и вёрстке сайтов.
Хотим показать, как получить реальный опыт в разработке сайтов и веб-приложений.
А именно:
- Сверстать веб-сайт на HTML + CSS;
- Реализовать функционал на JavaScript;
- Пощупать фронтенд-фреймворк Angular;
- Подключить Backend и загрузить сайт на хостинг.
Чтобы в итоге ты своими руками разработал качественный сайт, который не стыдно добавить в портфолио или продать.
Такой опыт можно получить на бесплатном практикуме уже завтра с поддержкой от опытных кураторов на каждом этапе.
👉 Приходи на бесплатное обучение и зови с собой друзей
Бонусом получишь гайд для поиска работы и заказов на фронтенд-разработку.
Собеседование — битва к которой нужно подготовиться
Ты ищешь первую работу или решил сменить работу? Поздравляю! Впереди тебя ждет карусель интересных приключений: от собеседований и до ожидания обратной связи. Я провел немало собеседований, и у многих кандидатов есть одна общая ошибка — отсутствие подготовки. Они идут напролом, что заслуживает уважения, но можно облегчить себе путь, если подготовиться заранее. Ниже я опишу простые способы подготовки. Однако помни: не стоит затягивать с выходом на собеседования. Подготовка не должна превращаться в бесконечное "а вот этот вопрос изучу поглубже, этот курс пройду, еще видео посмотрю". Не превращайся в "вечного студента". Скорее всего, все нужные знания у тебя уже есть; главное — их УПАКОВАТЬ (как бы инфоцыгански это ни звучало).
👉 @frontendInterview
Как клонировать репозиторий на GitHub?
Чтобы клонировать репозиторий, нужно установить на компьютер Git CLI. Как это сделать описано в статьях «Системы управления версиями» и «Git CLI».
Выполните в терминале команду:
git clone <ссылка на репозиторий>
❓ Хотите создать свою первую веб-страницу с нуля? Без магии и кодерских заклинаний — только HTML, CSS и ваши идеи!
👉 На открытом вебинаре «Создаем свою первую страницу: HTML и CSS» вы узнаете, как работают основные элементы веб-разработки: от структуры HTML до современной стилизации с CSS.
Мы разберем шаги, которые помогают создать не просто страницу, а основу для вашего портфолио или будущего сайта!
💪 Это ваш шанс научиться веб-разработке, используя простой и мощный инструментарий. Уже на вебинаре вы создадите свою первую веб-страницу — с текстом, картинками и уникальным дизайном!
⏰ Регистрируйтесь на открытый урок 3 декабря в 19:00 мск! Урок проходит в преддверии старта курса «Fullstack Developer», участники вебинара получат скидку на обучение.
👉 Для участия зарегистрируйтесь: https://vk.cc/cFAkGE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru erid 2SDnjePUVLF
Гайд «Как собственнику управлять отделом маркетинга?»
Одна из главных ошибок собственников бизнеса — это попытка быть везде и сразу. Как учит любой успешный инвестор, важно не работать на деньги, а заставлять их работать на тебя. То же самое касается и маркетинга. Если вы думаете, что можете взять на себя роль маркетолога и управлять компанией одновременно — вы теряете время и деньги💰. Маркетинг — это не про удачу или интуицию. Это система, построенная на знаниях, опыте и анализе. Собственник должен концентрироваться на стратегических решениях, а не тонуть в операционных задачах отдела маркетинга.
Скачайте наш бесплатный гайд, чтобы узнать, как создать такой маркетинговый отдел, который будет работать на вас, принося результат, а не отвлекая от главного✅.
Скачать
#реклама 16+
cmonster.io
О рекламодателе
JavaScript From Zero to Hero
Cамое полное руководство на свете. Освойте современный JavaScript, даже если вы новичок в программировании
👉 @frontendInterview
backface-visibility
Свойство backface-visibility управляет видимостью задней части элемента, если тот развёрнут относительно пользователя с помощью свойства transform. Это нужно только для 3D-трансформаций, для 2D-трансформаций свойство не имеет эффекта. Оно используется для создания более реалистичных 3D-сцен, скрывая изнанку объектов при их вращении.
Есть всего два возможных значения:
- visible — значение по умолчанию, задняя сторона элемента видна. Например, при вращении элемента на 180 градусов его задняя часть будет отображаться;
- hidden — задняя сторона элемента не видна. Это полезно, когда вы хотите скрыть обратную сторону элемента при его вращении, что создаёт иллюзию, будто элемент исчезает, когда повёрнут спиной.
Пример
Задняя сторона будет скрыта:
.element {
transform: rotateY(180deg);
backface-visibility: hidden;
}
Обучение на Frontend-разработчика. С нуля за 9 месяцев.
На курсе вы получите все навыки, необходимые для старта в профессии Frontend-разработчика.
Персональный наставник middle/senior уровня.
14 проектов, лайвкодинг, хакатоны, репетиции техсобеседования.
Освоите JavaScript, React, TypeScript
Официальный диплом и сертификат школы.
Поддержка наставника по JS в течение 3-х месяцев после диплома.
Гарантия трудоустройства. Если вы не устроитесь, вернём деньги. Это закреплено в договоре п. 6.14
С 9 по 30 ноября 2024 г. скидка 40% на все программы Result School
Узнать больше
#реклама 16+
result.school
О рекламодателе
Выразительный React: интерактивность на клиенте
В статье описан один из стандартных подходов к созданию React-приложения.
Эта статья — продолжение серии «Выразительный React». В предыдущей статье «Выразительный React: простые компоненты на сервере» была показана техника SSR (Server-Side Rendering). В ней разбирались определения, которые пригодятся при чтении этой статьи.
👉 @frontendInterview
Что лучше использовать div или React.Fragment?
React.Fragment
Позволяет группировать несколько дочерних элементов без добавления дополнительного узла в DOM. Это полезно, когда вам нужно вернуть несколько элементов из компонента, но вы не хотите добавлять лишние элементы, такие как <div>
, в структуру DOM.
Плюсы:
- Чистый DOM
Фрагменты не создают дополнительных элементов в DOM, что помогает избежать ненужных вложенных структур и упрощает разметку.
- Производительность
Избегание дополнительных узлов может немного улучшить производительность, так как уменьшается количество элементов, которые браузер должен обрабатывать и рендерить.
- Логическая группировка
Использование фрагментов делает код более семантичным и чистым, показывая, что элементы логически связаны без необходимости добавлять новый HTML-элемент.
Пример использования
Элемент <div>
добавляет новый узел в DOM и используется для группировки других элементов. Это стандартный блоковый элемент в HTML, который часто используется для создания контейнеров и структурирования страницы.
import React from 'react';
function List() {
return (
<React.Fragment>
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</React.Fragment>
);
}
// С использованием короткого синтаксиса:
function List() {
return (
<>
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
</>
);
}
<div>
позволяет легко добавлять стили, классы и атрибуты, что делает его полезным для создания структурированных и стилизованных контейнеров.<div>
подходит для создания блоков, секций и контейнеров, которые требуют определенной разметки или стилей.import React from 'react';
function Container() {
return (
<div className="container">
<p>Это первый параграф</p>
<p>Это второй параграф</p>
</div>
);
}
Бесплатный курс по дизайну в FIGMA
Онлайн-программа с наставником и чатом.
Осторожно! 80% практики.
По результату обучения у вас будет портфолио из нескольких работ.
Сертификат о прохождении курса.
Возможность пройти полное обучение и получить гарантированное трудоустройство!
Учитесь дизайну у профессионалов.
Переходи по кнопки: "Узнать больше" и начинай свое обучение.
Доступ 0 руб.
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
Введение в веб-разработку на языке JavaScript: учебное пособие
В учебно-методическом пособии рассматриваются фундаментальные основы и прикладные аспекты использования языка JavaScript для клиентской и серверной разработки веб-ресурсов. Проанализированы основные тенденции развития наиболее распространённого языка клиентского веб-программирования в свете внедрения новых стандартов ECMAScript.
👉 @frontendInterview
Как проверить, что поле является массивом ?
Для проверки, является ли поле массивом, можно использовать несколько методов. Самый распространенный и рекомендуемый способ — это использование метода Array.isArray()
. Этот метод проверяет, является ли переданное значение массивом, и возвращает true
или false
.
Пример
const arr = [1, 2, 3];
const notArr = "Hello";
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(notArr)); // false
instanceof
:Array
.const arr = [1, 2, 3];
const notArr = "Hello";
console.log(arr instanceof Array); // true
console.log(notArr instanceof Array); // false
Object.prototype.toString.call()
:Object.prototype.toString.
const arr = [1, 2, 3];
const notArr = "Hello";
console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true
console.log(Object.prototype.toString.call(notArr) === '[object Array]'); // false
- Может давать неверные результаты, если массив создан в другом контексте (например, в iframe).
- Object.prototype.toString.call():
- Универсальный метод для проверки различных типов объектов.
- Меньше подвержен проблемам с контекстом, но выглядит менее читаемым по сравнению с Array.isArray().
Правда...
👉 @frontendInterview
Пишите код быстрее и оставляйте больше времени на творчество вместе с AI-ассистентом разработчика
Устали от рутины? Отдайте ее AI!
Заходите на платформу GitVerse и пишите код вместе с AI-ассистентом GigaCode. Он поддерживает более 35 языков, умеет анализировать контекст, дописывать строки и функции в автоматическом и ручном режимах, а еще — писать код по комментариям и делать рефакторинг с помощью коротких команд. Всего за пару минут AI-помощник может оценить проект и трудозатраты на его создание.
Внутри AI есть функция CodeChat — с ней можно оптимизировать или отрефакторить имеющийся код, сгенерировать тесты и документацию, а также объяснить фрагмент кода. Задавать вопросы можно и по всему открытому файлу, и по конкретному фрагменту — просто выделите его в редакторе и сформулируйте запрос к CodeChat.
Хорошие новости — недавно GigaCode обновился и стал еще лучше справляться с задачами разработки: теперь наиболее вероятные продолжения кода будут генерироваться с учётом контекста всего проекта. Не забудьте обновить плагин GigaCode :)
Зарегистрироваться на GitVerse.
Открытый вебинар "Создание веб-компонентов и использование Shadow DOM"
🎁Полный обзор веб-компонентов: создание независимых, повторно используемых элементов интерфейса на чистом JavaScript и Shadow DOM
На практике изучите:
- Изоляция стилей и поведения, создание защищенных компонентов.
- Примеры создания интерфейсов, работающих с нативным JavaScript и интегрируемых с фреймворками, такими как React и Vue, где уже есть поддержка для веб-компонентов.
Что узнают участники?
✅ Как создать нативные веб-компоненты с использованием JavaScript и Shadow DOM — мощные, инкапсулированные элементы для долгосрочной поддержки.
🤖 Методы работы с Shadow DOM — независимость от остального кода и адаптация под любые задачи
❓ Почему веб-компоненты — это фундамент для универсальных интерфейсов, и как фреймворки уже используют эти принципы, давая возможность легко внедрять и масштабировать элементы.
🔥Регистрируйтесь на урок 4 декабря, в 20:00 мск и получите скидку на большое обучение «JavaScript Developer. Professional»: https://vk.cc/cFDEU6
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 erid 2SDnjerK15V
Как снизить затраты на разработку UI? / Как масштабировать изменения в UI без лишних затрат? / Как экономить на разработке UI без потери качества?
Узнайте 18 декабря на бесплатном вебинаре СберТеха «UI-выгорание, или что не так с бренд-дизайном приложений».
Эксперты СберТеха поделятся опытом собственных проектов и расскажут, как создали решение, которое в разы ускоряет разработку и масштабирование изменений UI.
Platform V One UI — библиотека UI-компонентов с трехуровневой дизайн-токен системой, а также low-code инструментами стилизации и генерации UI-форм и сценариев.
Также на вебинаре узнаете, какие инструменты Platform V One UI доступны в open source, и увидите демо продукта.
Регистрируйтесь и приходите!
Как можно скопировать объект в JS?
Есть несколько способов скопировать объект. Важно понимать разницу между поверхностным (shallow) и глубоким (deep) копированием. Поверхностная копия копирует только сам объект и его непосредственные свойства, в то время как глубокая копия копирует весь объект и все его вложенные объекты.
Поверхностное копирование
1. Метод Object.assign
копирует все перечисляемые свойства из одного или более исходных объектов в целевой объект.
const original = { a: 1, b: 2 };
const copy = Object.assign({}, original);
console.log(copy); // { a: 1, b: 2 }
...
) также можно использовать для создания поверхностной копии объекта.const original = { a: 1, b: 2 };
const copy = { ...original };
console.log(copy); // { a: 1, b: 2 }
undefined
значений.const original = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(original));
console.log(copy); // { a: 1, b: { c: 2 } }
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
const arrCopy = [];
for (let i = 0; i < obj.length; i++) {
arrCopy[i] = deepCopy(obj[i]);
}
return arrCopy;
}
const copy = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
const original = { a: 1, b: { c: 2 } };
const copy = deepCopy(original);
console.log(copy); // { a: 1, b: { c: 2 } }
const _ = require('lodash');
const original = { a: 1, b: { c: 2 } };
const copy = _.cloneDeep(original);
console.log(copy); // { a: 1, b: { c: 2 } }
Training JS #7: if..else and ternary operator
Функция принимает 1 параметр: n, n - это количество хот-догов, которые купит клиент, за покупку нескольких штук предусмотрены скидки. Сколько денег потратит клиент, чтобы купить указанное количество хот-догов?
n < 5 $100
n >= 5 и n < 10 $95
n >= 10 $90
Пример:saleHotdogs( 1 ) => 100
saleHotdogs( 5 ) => 475
saleHotdogs( 10 ) => 900
ТОП-4 Курса по Программированию
⚡Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов.
✅Хотите стать программистом, но не знаете с какого языка начать?
Помогаем разобраться в самых популярных и востребованных языках программирования.
Подарок в конце подборки!
Выбрать
#реклама 16+
tutortop.ru
О рекламодателе
“Ну тут недельки на две”. Оцениваем задачи
Работа в сфере информационных технологий – не стройка. Большая часть задач требует от человека мыслительного процесса и творческого подхода. Именно поэтому так сложно оценить задачу правильно, именно поэтому мы часто ошибаемся в наших оценках и это нормально. Ошибки – часть рабочего процесса.
👉 @frontendInterview
Привет!
IT-компания ASTON запускает бесплатное онлайн-обучение Java-разработчик!
🌟 Лучшие участники получат приглашение на стажировку JAVA Разработчик с последующим трудоустройством в ASTON.
🤩 На этапе Лаборатории стипендия 23 000 RUB, первая ЗП от 70 000 RUB
Обучение включает 3 ступени: 📌 I (начальный уровень): онлайн-курс (1 месяц); 📌 II (средний): онлайн-интенсив (2 месяца); 📌 III (продвинутый уровень): Лаборатория (3-4 месяца) с трудоустройством.
Старт курса (I ступень) — 9 декабря 2024:1 месяц, 2 раза в неделю, вечерние занятия (1–1,5 часа).
🌍 Где набираем:Россия (до GMT+7)
Требования:
базовые знания Java;
законченное высшее образование.
📋 РЕГИСТРАЦИЯ
Расти в IT вместе с ASTON!
#реклама
О рекламодателе
Вы опытный web-разработчик? Приходите на открытый вебинар "От React к Vue за один шаг: как легко освоить новый фреймворк"!
Что будет на вебинаре?
- Сравнение основных компонентов и концепций React и Vue, чтобы увидеть, как они перекликаются.
- Разбор синтаксиса, управления состоянием и рендеринга — выясним, насколько привычные подходы из React можно легко применить в Vue.
- Практическое руководство по быстрому освоению Vue через знакомые идеи и шаблоны из React.
Что узнают участники?
- Как легко перейти с React на Vue, используя знакомые концепции.
- Принципы организации компонентов и управления состоянием, которые делают переход плавным и понятным.
- Уверенность в том, что навыки, освоенные в React, могут быть полезны и ускорить работу с Vue в реальных проектах.
🔥Регистрируйтесь на урок 27 ноября, в 20:00 мск и получите скидку на большое обучение «JavaScript Developer. Professional»: https://vk.cc/cFgGP4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 erid 2SDnjdBz9Dd
Two fighters, one winner.
Создайте функцию, которая возвращает имя победителя в бою между двумя бойцами. Каждый боец по очереди атакует другого, и побеждает тот, кто первым убьет другого. Смерть определяется как health <= 0
.
Каждый боец будет объектом/экземпляром Fighter
. Смотрите ниже класс Fighter
на выбранном вами языке.health
и damagePerAttack
за атаку будут целыми числами, большими 0. Вы можете мутировать объекты Fighter
.
Ваша функция также получает третий аргумент - строку с именем бойца, который атакует первым. Пример:
declare_winner(Fighter("Lew", 10, 2), Fighter("Harry", 5, 4), "Lew") => "Lew"
Lew attacks Harry; Harry now has 3 health.
Harry attacks Lew; Lew now has 6 health.
Lew attacks Harry; Harry now has 1 health.
Harry attacks Lew; Lew now has 2 health.
Lew attacks Harry: Harry now has -1 health and is dead. Lew wins.
function Fighter(name, health, damagePerAttack) {
this.name = name;
this.health = health;
this.damagePerAttack = damagePerAttack;
this.toString = function() { return this.name; }
}