Сделай контролируемый инпут, храни его значение в состоянии и отображай длину строки. Счётчик не должен показывать значение больше 32.
Контролируемые поля ввода. Управляй значением из state и показывай актуальную длину.
onChange.Карточка с инпутом и счётчиком символов (ограничение 32).
Финальный результат должен быть таким:

onChange.maxLength={32}.value.length.input (DOM): https://react.dev/reference/react-dom/components/inputimport React, { useState } from 'react';
import './styles.css';
export function TextInputCounter({ placeholder = 'Введите текст...' }) {
const [value, setValue] = useState('');
function handleChange(e) {
setValue(e.target.value);
}
return (
<article className="input-card" data-testid="input-card">
<input
className="text-input"
type="text"
placeholder={placeholder}
value={value}
onChange={handleChange}
maxLength={32}
/>
<p className="counter" aria-label="counter">{value.length}</p>
</article>
);
}
export default function App() {
return (
<main className="challenge-container">
<section>
<TextInputCounter />
</section>
</main>
);
}Сделай контролируемый инпут, храни его значение в состоянии и отображай длину строки. Счётчик не должен показывать значение больше 32.
Контролируемые поля ввода. Управляй значением из state и показывай актуальную длину.
onChange.Карточка с инпутом и счётчиком символов (ограничение 32).
Финальный результат должен быть таким:

onChange.maxLength={32}.value.length.input (DOM): https://react.dev/reference/react-dom/components/inputimport React, { useState } from 'react';
import './styles.css';
export function TextInputCounter({ placeholder = 'Введите текст...' }) {
const [value, setValue] = useState('');
function handleChange(e) {
setValue(e.target.value);
}
return (
<article className="input-card" data-testid="input-card">
<input
className="text-input"
type="text"
placeholder={placeholder}
value={value}
onChange={handleChange}
maxLength={32}
/>
<p className="counter" aria-label="counter">{value.length}</p>
</article>
);
}
export default function App() {
return (
<main className="challenge-container">
<section>
<TextInputCounter />
</section>
</main>
);
}Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!