Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
10
Анализ поведения React‑компонента ReviewMe и проверка добавления задач
Компании, где спрашивали:
ITFB Group
Условие задачи
Необходимо сформировать вывод о том, как работает данный компонент, какие задачи он решает и какие потенциальные недостатки могут возникнуть. Особое внимание уделите логике добавления новых задач как при нажатии клавиши Enter, так и при клике по кнопке.
import React from "react";
const ReviewMe = () => {
const [inputValue, setInputValue] = React.useState('');
const [items, setItems] = React.useState([]);
const [counter, setCounter] = React.useState(1);
React.useLayoutEffect(() => {
const handler = (event) => {
if (event.keyCode === 13) {
createTask(inputValue);
}
};
document.addEventListener("keydown", handler);
// Note: no cleanup, which may cause a memory leak on re‑renders.
}, []);
const createTask = React.useCallback((text) => {
const newTask = { id: counter, text };
setItems([...items, newTask]);
setCounter(counter + 1);
setInputValue('');
});
return (
<div>
<input
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
placeholder="Enter a new task"
/>
<button onClick={() => createTask(inputValue)}>Add Task</button>
<div>
{items.map((task) => (
<div key={task.id}>{task.text}</div>
))}
</div>
<p>Total Tasks: {counter}</p>
</div>
);
};
export default ReviewMe;
В описании следует указать, что компонент позволяет вводить текст задачи, сохранять её в массив и отображать список. Нужно проверить, что задача добавляется при нажатии Enter и при клике на кнопку, а также обратить внимание на возможные проблемы: отсутствие очистки обработчика события, использование useLayoutEffect без необходимости, отсутствие зависимостей в useCallback, потенциальные баги с замыканиями при обновлении состояния.