问题可能出现在 React.memo 上。React.memo 是一个高阶函数,用于对组件进行记忆。它可以帮助组件在 props 没有改变时避免重新渲染。但是,React.memo 仅对浅层比较进行检查。如果父组件在每次渲染时都传递了一个新的 appId,即使其值相同,React.memo 也会认为 props 发生了变化,导致 AppBanner 组件重新渲染。

解决这个问题的方法是确保父组件在传递 appId 时不会创建新的引用。可以使用 useCallback 或 useMemo 来缓存父组件传递的函数或值,以确保它们在每次渲染时都保持相同的引用。

例如,可以在父组件中使用 useMemo 来缓存 AppBanner 的 appId:

const memoizedAppId = useMemo(() => appId, [appId]);

然后将 memoizedAppId 传递给 AppBanner 组件:

这样做可以确保即使 appId 的值相同,AppBanner 组件也不会重新渲染,除非其它依赖项发生了变化

reactjs v18 const AppBanner = Reactmemofunction AppBanner appId consolelogbanner + appId; const css theme = useStyletron; const navigate = useNavigate; const user = useAuth; const d

原文地址: https://www.cveoy.top/t/topic/iBkD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录