Сделай условный рендеринг: компонент
Greetingвыводит “Привет, user” при авторизации и “Войдите” — иначе. Только безuseState.
Отличная разминка! Нам часто нужно показывать разные сообщения в зависимости от статуса пользователя. Твоя задача — сделать это чисто и просто, без состояния, только на пропсах.
Greeting, который принимает пропсы:
isAuthenticated: boolean — признак авторизации,name: string — имя пользователя (по умолчанию 'user').isAuthenticated === true — показывай текст: Привет, {name}.isAuthenticated === false — показывай текст: Войдите.useState — в этой задаче достаточно условного рендера по пропсам.Компонент должен корректно показывать оба состояния: для авторизованного пользователя и для гостя.
Финальный результат должен быть таким:

{isAuthenticated ? 'Привет, ' + name : 'Войдите'}.function Greeting({ isAuthenticated, name = 'user' }).import React from 'react';
import './styles.css';
export function Greeting({ isAuthenticated, name = 'user' }) {
return (
<div className="greeting-card" data-testid="greeting">
<p className="greeting-text">
{isAuthenticated ? `Привет, ${name}` : 'Войдите'}
</p>
</div>
);
}
export default function App() {
return (
<main className="challenge-container">
<section>
<div className="greeting-card">
<Greeting isAuthenticated={true} name="Александр" />
</div>
<div className="greeting-card" style={{ marginTop: 16 }}>
<Greeting isAuthenticated={false} />
</div>
</section>
</main>
);
}Почему это работает: Логика построена на пропсах, а не на состоянии. isAuthenticated определяет, какой текст отобразить, а name используется только в ветке авторизации. За счёт тернарного оператора компонент остаётся простым, предсказуемым и легко тестируемым.
Сделай условный рендеринг: компонент
Greetingвыводит “Привет, user” при авторизации и “Войдите” — иначе. Только безuseState.
Отличная разминка! Нам часто нужно показывать разные сообщения в зависимости от статуса пользователя. Твоя задача — сделать это чисто и просто, без состояния, только на пропсах.
Greeting, который принимает пропсы:
isAuthenticated: boolean — признак авторизации,name: string — имя пользователя (по умолчанию 'user').isAuthenticated === true — показывай текст: Привет, {name}.isAuthenticated === false — показывай текст: Войдите.useState — в этой задаче достаточно условного рендера по пропсам.Компонент должен корректно показывать оба состояния: для авторизованного пользователя и для гостя.
Финальный результат должен быть таким:

{isAuthenticated ? 'Привет, ' + name : 'Войдите'}.function Greeting({ isAuthenticated, name = 'user' }).import React from 'react';
import './styles.css';
export function Greeting({ isAuthenticated, name = 'user' }) {
return (
<div className="greeting-card" data-testid="greeting">
<p className="greeting-text">
{isAuthenticated ? `Привет, ${name}` : 'Войдите'}
</p>
</div>
);
}
export default function App() {
return (
<main className="challenge-container">
<section>
<div className="greeting-card">
<Greeting isAuthenticated={true} name="Александр" />
</div>
<div className="greeting-card" style={{ marginTop: 16 }}>
<Greeting isAuthenticated={false} />
</div>
</section>
</main>
);
}Почему это работает: Логика построена на пропсах, а не на состоянии. isAuthenticated определяет, какой текст отобразить, а name используется только в ветке авторизации. За счёт тернарного оператора компонент остаётся простым, предсказуемым и легко тестируемым.
Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!