У меня есть следующий простой компонент:
const Dashboard = () => {
const [{ data, loading, hasError, errors }] = useApiCall(true)
if (hasError) {
return null
}
return (
<Fragment>
<ActivityFeedTitle>
<ActivityFeed data={data} isLoading={loading} />
</Fragment>
)
}
export default Dashboard
Я бы хотел запретить ВСЕ повторные рендеринг компонента ActivityFeedTitle
, чтобы он отображался только один раз при загрузке. Насколько я понимаю, я должен иметь возможность использовать хук React.useMemo
с пустым массивом зависимостей для достижения этой цели. Я изменил на return
на:
return (
<Fragment>
{React.useMemo(() => <ActivityFeedTitle>, [])}
<ActivityFeed data={data} isLoading={loading} />
</Fragment>
)
Насколько мне известно, это должно предотвратить все повторные рендеры этого компонента? Тем не менее, компонент ActivityFeedTitle
по-прежнему отображается повторно при каждом отображении компонента Dashboard
.
Чего мне не хватает?
РЕДАКТИРОВАТЬ:
Использование React.memo
все еще вызывает ту же проблему. Я попытался запоминать свой ActivityFeedTitle
компонент следующим образом:
const Memo = React.memo(() => (
<ActivityFeedTitle />
))
, а затем использовал его в своем возвращении:
return (
<Fragment>
{<Memo />}
<ActivityFeed data={data} isLoading={loading} />
</Fragment>
)
Та же проблема возникает. Я также попытался передать () => false
следующее как второй аргумент React.memo
, но это также не сработало.