【发布时间】:2021-01-25 04:15:34
【问题描述】:
我最近开始学习 React。我在 UseEffect 中使用调度时遇到问题,它位于循环中的子级内部。我不能发布所有项目,但下面的代码:
在主页上显示在线商店产品。在一个单独的组件中,有一张使用地图循环显示的小卡片:
<Row className='mt-20'>
{products.map(product => (
<ProductItem key={product._id} product={product} history={history} />
))}
</Row>
子组件代码:
const ProductItem = ({ product, history }) => {
const dispatch = useDispatch()
const reviewList = useSelector(state => state.reviewList)
const { reviews } = reviewList
useEffect(() => {
let clean = false
if (!clean) dispatch(listReviewsDetailsByProductId(product._id))
return () => (clean = true)
}, [dispatch, product])
const productRate =
reviews.reduce((acc, item) => item.rating + acc, 0) / reviews.length || 0
return (
<Col xl='3' sm='6'>
<Card>
<Card.Body>
<div
className={'product-img position-relative ' + styles.wrapperImage}
>
<Link to={'/product/' + product.slug}>
{product.images[0] && (
<img
src={product.images[0].path}
alt=''
className='mx-auto d-block img-fluid'
/>
)}
</Link>
</div>
<div className='mt-4 text-center'>
<h5 className='mb-3 text-truncate'>
<Link to={'/product/' + product.slug} className='text-dark'>
{product.name}{' '}
</Link>
</h5>
{reviews && (
<div className='mb-3'>
<StarRatingsCustom rating={productRate} size='14' />
</div>
)}
<ProductPrice price={product.price} newPrice={product.newPrice} />
</div>
</Card.Body>
</Card>
</Col>
)
}
我使用调度操作从服务器获取特定产品的评论,然后计算评级并显示它。不幸的是,它每隔一段时间就会起作用,评级出现,然后消失。非常感谢您的帮助!
警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要解决此问题,请在 useEffect 清理函数中取消所有订阅和异步任务。 在 SingleProduct 中(由 Context.Consumer 创建) 在路线中(在 Root.jsx:96)
【问题讨论】:
标签: javascript reactjs react-redux react-hooks