Javascript React重画列表中使用NextJS中的useRouter的所有元素

Javascript React重画列表中使用NextJS中的useRouter的所有元素,javascript,reactjs,next.js,Javascript,Reactjs,Next.js,在我的新应用程序中,我使用React和NextJS。应用程序有一个html列表元素,其中包含当页面处于活动状态时高亮显示的项目。单击此列表中的某个项目时,您将进入另一个页面。查看分析器,我注意到列表中的所有元素都被重新绘制,尽管只有2个元素应该被重新绘制 在此组件中开始重绘 export const SidebarOrganizationsListItemLink: React.FC<SidebarOrganizationsListItemLinkProps> = (props)

在我的新应用程序中,我使用React和NextJS。应用程序有一个html列表元素,其中包含当页面处于活动状态时高亮显示的项目。单击此列表中的某个项目时,您将进入另一个页面。查看分析器,我注意到列表中的所有元素都被重新绘制,尽管只有2个元素应该被重新绘制

在此组件中开始重绘

export const SidebarOrganizationsListItemLink: React.FC<SidebarOrganizationsListItemLinkProps> = (props) => {
  const { className: classNameProp, data: { organization }, ...restProps } = props;
  const classes = useStyles()
  const router = useRouter()

  const active = React.useMemo(() => {
    const { organizationId } = router.query

    return organizationId === organization.id
  }, [router, organization.id])
  const className: string = React.useMemo(() => {
    return clsx(classes.root, { [classes.active]: active }, classNameProp)
  }, [classes, classNameProp, active])

  return (
    <ButtonLink {...restProps} className={className}>
      <Badge color="secondary" overlap="circle" badgeContent={organization.badgeContent}>
        <Avatar className={classes.avatar}>{organization.alt}</Avatar>
      </Badge>
    </ButtonLink>
  )
}
export const SidebarOrganizationsListItemLink:React.FC=(props)=>{
const{className:classNameProp,数据:{organization},…restProps}=props;
常量类=useStyles()
const router=useRouter()
const active=React.useMoom(()=>{
const{organizationId}=router.query
返回organizationId==organization.id
},[router,organization.id])
const className:string=React.useMoom(()=>{
返回clsx(classes.root,{[classes.active]:active},classNameProp)
},[classes,classNameProp,active])
返回(


为什么会发生这种情况以及如何避免这种情况?

您正在使用React.usemo包装SidebarOrganizationsList组件。根据usemo,它将返回一个已记忆的值,但似乎不会传入依赖项数组

如果未提供数组,则将在每次渲染时计算新值


谢谢你的回答,但我用的是React.memo,不是React.useMoom在这种情况下,你有什么理由不能只用React.useMoom吗?