javascript - 为什么使用 useRef 钩子定义的计数器在每次渲染时都不会递增?
问题描述
我正在尝试使用钩子 useRef() 来保留接下来要显示哪些项目的计数器,并在每次渲染时递增计数器,并使用计数器值对数组中的元素进行切片。在每次渲染时,计数器 index.current 应该增加 10,但在我的情况下,它没有增加,我一遍又一遍地得到相同的 10 个元素。我不知道为什么。这里的集合概览组件在集合预览组件上映射了 4 次。
//CollectionPreview
const CollectionPreview = ({title,movieItems,Counter}) => {
const index = React.useRef(0)
const movieData = movieItems.slice(index.current, index.current + 10)
index.current += 10
return (
<div className="collection-preview">
<h1 className="title">{title.toUpperCase()}</h1>
<div className="preview">
{console.log(movieData)}
</div>
</div>
);
}
const mapStateToProps = state => ({
movieItems: selectMovieItems(state),
})
export default connect(mapStateToProps)(CollectionPreview);
//CollectionOverview
class CollectionOverview extends React.Component {
render() {
return (
<div className="collection-overview">
{
CollectionData.map(items =>
<CollectionPreview key={items.id} title={items.title} />)
}
</div>
);
}
}
export default CollectionOverview;
解决方案
就我个人而言,我认为计算渲染的数量是不好的模式,因为渲染可以在不同的场合被多次调用,并且随着你的应用程序变得越来越大,很难跟踪每一次渲染调用。
我认为更好的方法是在某处拥有initialIndex
或处于某种状态。pageIndex
当你使用 Redux 时,我认为你应该把它放在 reducer 中并创建适当的操作来增加这个值。
推荐阅读
- controller - Metrics/AbcSize:创建的分配分支条件大小太高。[15.17/15]
- typescript - 用于在 VS Code 中以捷克语在 TypeScript 中显示错误消息的语言环境
- hadoop - 文件传输到 HDFS
- python - 如何使用 TensorFlow 操作排除图像圆圈之外的所有值?
- python - 在 Pandas DataFrame 中添加从现有列和 API 调用计算的列
- java - 如何使用域发现模式在 Payara Server 中创建域数据网格?
- javascript - 如何在javascript中访问json中的特定数据
- vba - 在 Windows 10 上访问 2003 - RaiseEvent 似乎不起作用
- jquery - 如何在保持顺序的同时向排序表中插入行
- node.js - 如何在快速路由器中获取包含特殊字符的路由器值