[英]React JS Map only renders one element
I have an array of objects that are suposed to pass as props to a element to render a list for each object, but when I try the code only one its rendered and the others are ignored even though I've console.log them and I can see them.我有一个对象数组,这些对象应该作为道具传递给一个元素,以便为每个 object 呈现一个列表,但是当我尝试代码时,只有一个呈现了它,而其他的被忽略了,即使我已经 console.log 他们和我可以看到他们。 Here's the code:
这是代码:
const mainFilterQueries = ['popular', 'top_rated', 'upcoming']
const sortByMovies = "movie"
const [moviesLists, setMoviesLists] = useState([])
useEffect(()=>{
createLists(mainFilterQueries, sortByMovies , setMoviesLists, moviesLists)
console.log(moviesLists)
}, [])
async function fetchData(query, sort, setMethod, state){
let listsCreated = []
try {
const response = await fetch(`https://api.themoviedb.org/3/${sort}/${query}?api_key=${apikey}`)
const data = await response.json();
let dataObject = {key:`${sort}-${query}`, data:data.results, title:`${query}`}
console.log(dataObject)
listsCreated.push(dataObject);
setMethod([...state, dataObject])
} catch (error) {
console.error(error)
}
}
function createLists(arr, sort, target, state){
arr.forEach(query =>{
fetchData(query, sort, target, state)
})
}
return (
<React.Fragment>
{moviesLists.map(list =>{
return(
<div>
<MoviesList dataList={list}/>
</div>
)
})}
</React.Fragment>
)
You're calling setMethod([...state, dataObject])
in a loop.您正在循环中调用
setMethod([...state, dataObject])
。 state
will never be updated until the next render, meaning you're actually calling the function as if it were like this: setMethod([...[], dataObject])
for every iteration. state
在下一次渲染之前永远不会更新,这意味着您实际上是在调用 function 就好像它是这样的:每次迭代的setMethod([...[], dataObject])
。
Instead use the functional update form of setState
like this:而是使用
setState
的功能更新形式,如下所示:
setMethod((prev) => ([...prev, dataObject]))
The functional update ensures that the previous state is most up-to-date with any previous calls to setMethod
.功能更新确保之前的 state 与之前对
setMethod
的任何调用都是最新的。
See also why-calling-react-setstate-method-doesnt-mutate-the-state-immediately .另请参阅为什么调用反应设置状态方法不改变状态立即。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.