[英]Rerendering issue in React hooks
每次更新购物车以更新购物车的calculatedPrice
价格 state 时,我都想重新渲染我的浏览器。 我可以在useEffect
中通过将cart
放入框中来执行此操作,但我也在useEffect
中获取数据,因此每次更新购物车时,我的浏览器都会从 API 重新获取。 有没有办法在不从 API 重新获取的情况下做到这一点?
React.useEffect(() => {
async function fetchData() {
const result = await axios(API)
const items = result.data.data.items.map((item) => {
item.count = 0
return item
})
setProducts(items)
}
fetchData()
setCalculatePrice(() =>
cart.reduce((price, product) => price + product.price, 0).toFixed(2),
)
}, [cart])
更新购物车 function
const updateCart = React.useCallback(
(product, index) => {
const newCart = removeItemOnce(cart, product)
products[index].count = products[index].count - 1
setCart([...newCart])
setProducts(products)
},
[cart, products],
)
你可以有单独的 useEffects。 甚至建议将它们分开。 所以在你的情况下,我会这样做:
React.useEffect(() => {
async function fetchData() {
const result = await axios(API)
const items = result.data.data.items.map((item) => {
item.count = 0
return item
})
setProducts(items)
}
fetchData();
}, [])
这将在组件安装时调用一次。 对于购物车更新
React.useEffect(() => {
setCalculatePrice(() =>
cart.reduce((price, product) => price + product.price, 0).toFixed(2),
);
}, [cart]);
让我知道事情的后续!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.