Middle+
Conduct a code review of a React component that switches data, calls a string function, and displays a list. Find and fix all errors and issues (async in useEffect, missing dependency array, using index as key, etc.).
sobes.tech AI
Answer from AI
Main issues in a React component with data toggling, calling a string function, and rendering a list:
- async in useEffect: You cannot make the useEffect function itself async; instead, declare an async function inside and call it.
- Missing dependencies array: useEffect without a dependencies array runs after every render, which can lead to infinite loops.
- Using index as key: Not good for lists where order or content may change — better to use a unique identifier.
Example of corrected code:
import React, { useState, useEffect } from 'react';
function MyComponent({ data, stringFunctionName }) {
const [items, setItems] = useState([]);
useEffect(() => {
async function fetchData() {
// Assume data is a function or promise
const result = await data();
setItems(result);
}
fetchData();
}, [data]); // dependencies array with data
// Assume stringFunctionName is the name of a function from a functions object
const functionsMap = {
toUpperCase: str => str.toUpperCase(),
toLowerCase: str => str.toLowerCase(),
// other functions
};
const transform = functionsMap[stringFunctionName] || (str => str);
return (
<ul>
{items.map(item => (
<li key={item.id}>{transform(item.name)}</li> // using a unique id
))}
</ul>
);
}
export default MyComponent;
Thus:
- useEffect contains an internal async function.
- A dependencies array is added.
- A unique identifier is used for key instead of index.
- The string function call is implemented via mapping the name to a function.