我试图通过设置lazyload来创建无限滚动,但不能在postData函数中每次设置状态。
我可以看到arr数组正常工作,但它没有在setCards(arr)中设置。我看不到Devtolls组件工具中的更新
如果你知道的话.
const postData = async (searchInputValue,payload) => {
const response = await fetch("https://smarty.kerzz.com:4004/api/mock/getFeed", {
body: JSON.stringify(payload),
headers: {
Accept: "application/json",
Apikey: "bW9jay04ODc3NTU2NjExMjEyNGZmZmZmZmJ2",
"Content-Type": "application/json"
},
method: "POST"
})
const data = await response.json()
let arr =[...cards]
console.log(cards)
data.response.forEach((item, idx)=>{
arr.push(item)
})
console.log(arr) //[]
setCards(arr)
let a = counter + 1
let new_payload = payload;
new_payload.skip += 10*a
setPayload(new_payload)
setCounter(a)
}
useEffect(()=>{
// İlk yükleme sırasında lokasyon verisini alıp fonksiyonu çağırıyoruz. Aldığımız lokasyon
verisine göre işlemlere devam edeceğiz.
findLocation();
window.addEventListener('scroll' , ()=>{
let screen_height = window.innerHeight;
let scrollTop = document.documentElement.scrollTop;
var body = document.body,
html = document.documentElement;
var body_heigth = Math.max( body.scrollHeight, body.offsetHeight,
html.clientHeight, html.scrollHeight, html.offsetHeight );
if(scrollTop + 1 > body_heigth - screen_height && isloading === false && checked === false){
setIsloading(true)
postData(searchInputValue , payload)
}
})
},[])发布于 2022-08-22 18:45:16
如果使用以前的状态计算新状态,则可以将一个函数传递给setState。该函数将接收前一个值,并返回一个更新的值。
https://reactjs.org/docs/hooks-reference.html#functional-updates
示例:
setCounter((counter)=>(counter+1))
setCards((cards)=>(cards.concat(data.response)))对于setPayload也要这样做。
https://stackoverflow.com/questions/73449653
复制相似问题