Keys should be stable, predictable, and unique so that React can keep track of elements.
This limits the optimizations that React can do.
{todos.map((todo, index) =>
<Todo
{...todo}
key={index}
/>
)}
If you use element data for unique key, assuming todo.id is unique to this list and stable, React would be able to reorder elements without needing to reevaluate them as much.
{todos.map((todo) =>
<Todo {...todo}
key={todo.id} />
)}