<h1> и <table> дублируются в DOM каждый раз при добавлении новых значений в тело таблицы. Как сделать так чтобы не дублировалось?
<h1>
<table>
return users.map((user) => ( <> <h1>{renderPhrase(users.length)}</h1> <table class="table"> <thead> <tr> <th scope="col">Имя</th> <th scope="col">Качество</th> <th scope="col">Профессия</th> <th scope="col">Встретил, раз</th> <th scope="col">Оценка</th> </tr> </thead> <tbody> <tr> <td>{user.name}</td> <td> {user.qualities.map((quality) => ( <span className={`badge bg-${quality.color}`}> {quality.name} </span> ))} </td> <td>{user.profession.name}</td> <td>{user.completedMeetings}</td> <td>{user.rate}</td> <button key={user._id} className="badge bg-danger m-2" onClick={() => { handleDelete(user._id) }} > delete </button> </tr> </tbody> </table> </> ))
А вот что в итоге получается:
Вы должны преобразовать список пользователей в строки таблицы, а вы для каждого пользователя создаёте новую таблицу.
Чтобы всё работало как ожидается, вам нужно встроить map в тело таблицы и вернуть tr элемент для каждого пользователя
map
tr
return ( <> <h1>{renderPhrase(users.length)}</h1> <table class='table'> <thead> <tr> <th scope='col'>Имя</th> <th scope='col'>Качество</th> <th scope='col'>Профессия</th> <th scope='col'>Встретил, раз</th> <th scope='col'>Оценка</th> </tr> </thead> <tbody> {users.map((user) => ( <tr> <td>{user.name}</td> <td> {user.qualities.map((quality) => ( <span className={`badge bg-${quality.color}`}> {quality.name} </span> ))} </td> <td>{user.profession.name}</td> <td>{user.completedMeetings}</td> <td>{user.rate}</td> <button key={user._id} className='badge bg-danger m-2' onClick={() => { handleDelete(user._id) }} > delete </button> </tr> ))} </tbody> </table> </> )