【发布时间】:2020-10-16 13:17:37
【问题描述】:
当我调用fetchProducts 时,我希望在运行下一行代码之前更新 productPage 状态,因为下一行需要更新后的状态。
状态仅在函数完成运行后更新。无论我将console.log(productPage) 放在fetchProducts 函数中的哪个位置,它都会返回调用函数之前的状态。
const [productPage, setProductPage] = useState(1)
const [displayProducts, setDisplayProducts] = useState([])
const fetchProducts = async () => {
setProductPage(productPage + 1) // DOES NOT UPDATE UNTIL AFTER FUNCTION RUNS
const newProductsData = await fetch(`/api/getproducts?page=${productPage}`)
const newProductsArr = await newProductsData.json()
setDisplayProducts(displayProducts.concat(newProductsArr))
}
这可能吗?我找到了解决该问题的方法,但感觉很笨拙且不理想。
我也在使用 next.js,我不确定这是否会有所作为。我不能使用普通变量,因为它们在每次渲染时都会重置。
【问题讨论】:
-
将 productPage + 1 存储在函数顶部的 const 中,然后只使用该 var 吗?在功能范围内做你想执行的任务,完成后设置状态。
标签: reactjs react-hooks next.js