Вывести имя нового персонажа следующим пунктом в списке, а не рендерить по одному. Хотя бы инструкцию как это сделать
import React from "react"
export default function App() {
const [starWarsData, setStarWarsData] = React.useState({})
const [count, setCount] = React.useState(1)
React.useEffect(function() {
fetch(`https://swapi.dev/api/people/${count}`)
.then(res => res.json())
.then(data => setStarWarsData(data))
}, [count])
let arr =[]
let copy = [...arr, starWarsData]
const res = copy.map((el)=>{
return <li key={el}>{el.name}</li>
})
return (
<div>
<ul>
{res}
</ul>
<h2>The count is {count}</h2>
<button onClick={() => setCount(prevCount => prevCount + 1)}>Add</button>
</div>
)
}
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Для отображения списка персонаженй, необходимо создать данный список.
В вашем примере, при каждом запросе данных по персонажу, новый перезатирает предыдущего.
Вот пример реализации списка персонажей:
export default function App() {
const [starWarsData, setStarWarsData] = React.useState([]); // Теперь это массив
const [count, setCount] = React.useState(1);
React.useEffect(function() {
fetch(`https://swapi.dev/api/people/${count}`)
.then(res => res.json())
.then(data => setStarWarsData((prev) => {
const newData = [ ...prev ]; // Создаем копию
newData.push(data); // Пушим нового персонажа
return newData; // Возвращаем результат в сеттер
}))
}, [count]);
return (
<div>
<ul>
{starWarsData.map(el => (<li key={el.id}>{el.name}</li>))}
</ul>
<h2>The count is {count}</h2>
<button onClick={() => setCount(prevCount => prevCount + 1)}>Add</button>
</div>
)
}