【发布时间】:2021-12-20 08:25:34
【问题描述】:
在我的 Table 组件中,我使用 useSelector 挂钩从 redux 存储中获取数据。
const info = useSelector(state => {
if (type === 'catalog') {
return store.getState().catalog.products
}
if (type === 'category') {
return store.getState().categories.categories
}
})
然后我正在处理数据以纠正类型
React.useEffect(() => {
if(info.length) {
const prods:any = []
info.forEach((product: any) => {
const productObj: any = {}
productObj._prodid = product?._id
productObj.image = product?.catalogProduct?.image
productObj.category = product?.catalogProduct?.category.name
productObj.name = product?.catalogProduct?.name
productObj.pricePerPiece = product?.catalogProduct?.pricePerPiece
productObj.pricePerPackage = product?.catalogProduct?.pricePerPackage
productObj.address = product?.address
productObj.piecesAtStorage = product?.piecesAtStorage
prods.push(productObj)
})
setData(prods)
}
}, [info])
需要 3 次重新渲染。
第一次重新渲染 - useState 的初始数据
第二次重新渲染 - 来自 useSelector 的初始数据
第三次重新渲染 - 将数据从 useSelector 设置为 useState
输出看起来像这样。
是否可以避免useSelector引起的重新渲染?
【问题讨论】:
-
不相关但请不要在反应中使用
forEach和其他循环。有一些漂亮的数组方法不会改变数组并且更具可读性,例如map、filter、reduce。
标签: javascript reactjs redux react-redux react-hooks