Back to questions
Касперский
Middle+
2
Проведите код-ревью React-компонента, который выполняет переключение данных, вызывает строковую функцию и выводит список. Найдите и исправьте все ошибки и проблемы (async в useEffect, отсутствие массива зависимостей, использование индекса в качестве key и др.).
Companies where asked
Answer from AI
sobes.tech AI
Основные проблемы в React-компоненте с переключением данных, вызовом строковой функции и выводом списка:
- async в useEffect: нельзя делать саму функцию useEffect async, нужно объявить async функцию внутри и вызвать её.
- Отсутствие массива зависимостей: useEffect без массива зависимостей вызывается после каждого рендера, что может привести к бесконечным циклам.
- Использование индекса в качестве key: плохо для списков, где порядок или содержимое может меняться — лучше использовать уникальный идентификатор.
Пример исправленного кода:
import React, { useState, useEffect } from 'react';
function MyComponent({ data, stringFunctionName }) {
const [items, setItems] = useState([]);
useEffect(() => {
async function fetchData() {
// Предположим, data — это функция или промис
const result = await data();
setItems(result);
}
fetchData();
}, [data]); // массив зависимостей с data
// Предположим, что stringFunctionName — имя функции из объекта функций
const functionsMap = {
toUpperCase: str => str.toUpperCase(),
toLowerCase: str => str.toLowerCase(),
// другие функции
};
const transform = functionsMap[stringFunctionName] || (str => str);
return (
<ul>
{items.map(item => (
<li key={item.id}>{transform(item.name)}</li> // используем уникальный id
))}
</ul>
);
}
export default MyComponent;
Таким образом:
- useEffect содержит внутреннюю async функцию.
- Добавлен массив зависимостей.
- Для key используется уникальный идентификатор, а не индекс.
- Вызов строковой функции реализован через маппинг имени в функцию.