True Frontender
1.02K subscribers
143 photos
7 videos
89 links
Сборная солянка про фронтенд.

JavaScript, React, TypeScript, HTML, CSS — здесь обсуждаем всё, что связано с веб-разработкой!

Связь: @pmowq
Download Telegram
Подборка пятничных мемов 😋
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁148
Привет! Начнем неделю с очень крутой задачи на знание основ JS. Наверное, большинство может запутаться и дать неправильный ответ, но в этом нет ничего страшного.

Что выведет этот код?

var a = 5;

function f() {
if (a) {
console.log(a);
var a = 10;
}
}

f();



Ответ:
Ничего не будет выведено.

Разбор:
1. Переменная a внутри функции f поднимается в начало функции, но её значение остаётся undefined до строки var a = 10;.
2. В условии проверяется undefined, поэтому console.log(a) не вызывается.

Почему так?
Переменные, объявленные через var, поднимаются в начало области видимости, но их значение присваивается только на момент выполнения строки с присваиванием.

#JavaScript #interview
👍134👏4
Почти каждый из нас работает с TypeScript, и большинство сталкивалось с пересечением типов.

Что такое пересечение типов?
Пересечение типов позволяет объединить несколько типов в один. Это означает, что переменная будет иметь свойства всех типов, которые пересекаются.

interface Employee {
name: string;
position: string
}

interface ContactInfo {
email: string;
phone: string
}

type EmployeeContact = Employee & ContactInfo;

const employee: EmployeeContact = {
name: 'Иван',
position: 'Разработчик',
email: 'ivan@google.com',
phone: '+7(900)-000-0000'
};


Тип EmployeeContact включает в себя как поля из типа Employee, так и поля из типа ContactInfo.

Важно
Когда два типа имеют одинаковые поля с различными типами, это приводит к ошибке. В TypeScript такие поля получают тип never, что делает невозможным присваивание значений.

#typescript
👍10🔥5
Сделал небольшую шпаргалку со всеми типами инпутов

Ссылка на шпаргалку: CodePen
🔥11👍3👏1
Разберём ещё один полезный утилити-тип — Awaited 🖼️. Он позволяет извлечь тип результата из промиса.

Что делает Awaited?
Awaited<T> возвращает тип, в который разрешается промис T.
Проще говоря — убирает Promise-обёртку и достаёт внутренний тип.

Пример:

async function fetchData(): Promise<string> {
return "Строка с данными";
}

type ResultType = Awaited<ReturnType<typeof fetchData>>;
// Тип: string


Здесь мы комбинируем два утилити-типа — ReturnType (о котором я писал в этом посте) и Awaited.

Сначала ReturnType<typeof fetchData> даёт нам Promise<string>, а затем Awaited вытаскивает из него string.

#typescript
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5👏2
Пятничная подборка мемов 😂

Не забывайте, что у нас есть чат. Всем хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁108
Привет! Готовы к короткой рабочей неделе? Давайте начнем ее с формошлепства.

Иногда дизайнеры рисуют сложные формы — поля в одном месте, кнопки в другом. Cамый простой вариант, который приходит в голову — обернуть всё в форму. Да, это работает, но в большинстве случаев это приведёт как минимум к багам, а максимум — к архитектурным проблемам.

Что делать?
Связать кнопку с формой через атрибут form.
Этот атрибут позволяет кнопке отправлять форму, даже если она расположена вне её, благодаря привязке через id.


<form id="contactForm">
<input type="text" name="name" />
</form>

<!-- Кнопка вне формы -->
<button type="submit" form="contactForm">Сохранить</button>


Как это работает?
1. <form> получает id.
2. Кнопка вне формы указывает на этот id через атрибут form.
3. Браузер связывает кнопку с формой и корректно обрабатывает submit.

#HTML #BestPractices
🔥13👍1😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Видели сайты с красивым скроллом фона? Это легко сделать самому, используя всего одно свойство CSS — background-attachment: fixed;.

Демо и код тут: CodePen

Поддержка браузерами: CanIUse

#css
🔥12👍61
Одна из распространённых ошибок при работе с React — вызов хуков внутри условий, циклов или вложенных функций 🖼️

Пример кода с ошибкой:

function Component({ show }) {
if (show) {
useEffect(() => {
console.log("Какой-то эффект");
}, []);
}

return <div>Тут что-то интересное!</div>;
}


Ошибка: Invalid hook call

Исправление ошибки:

function Component({ show }) {
useEffect(() => {
if (show) {
console.log("Какой-то эффект");
}
}, [show]);

return <div>Тут что-то интересное!</div>;
}


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

Итог
Хуки должны вызываться всегда в одном порядке, без условий и вложенных блоков. Это базовое правило React, нарушение которого приводит к ошибкам в компонентах.

#react
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
На майские беру небольшой перерыв 😋
Советую и вам отложить всю технику и как следует отдохнуть!)

Напоминаю, что у нас есть чат — @TrueFrontenderChat.
В нём можно задавать вопросы, помогать другим и предлагать идеи для будущих постов 🐸

Хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍53
Привет! Небольшая задача с собеседования и отправляемся отдыхать 🏠

У нас есть следующий код:

const o = {
nameObject: "object o",
printName(a, b, c) {
console.log(this.nameObject);
},
};

// 1
o.printName();

// 2
let print = o.printName;
print();

// 3
print.call(o);

// 4
print.bind(o).call({ nameObject: "call name" });


Вопросы:
1. Что будет выведено на каждом шаге при выполнении кода в strict mode и без него?
2. Почему вывод отличается в разных случаях?

Разбор:
1. Метод printName вызывается через объект o, и this указывает на сам объект o.

2. Метод printName присваивается переменной print и вызывается как обычная функция. Контекст this теряется, и в non-strict он указывает на глобальный объект (window), у которого нет свойства name. В strict моде this будет undefined, и попытка обращения к this.nameObject вызовет ошибку.

3. Метод call вызывает функцию с переданным контекстом. В данном случае, this указывает на объект o.

4. Метод bind создаёт новую функцию с привязанным контекстом o. После этого вызывается call, который пытается изменить контекст на новый объект, но bind уже установил контекст, и call не может его установить повторно.

Ответ:
1. "object o"
2. В non-strict: undefined. В strict: ошибка
3. "object o"
4. "object o"

#interview #JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👀3
С Днем Победы!
19👍2