【发布时间】:2019-10-22 01:58:26
【问题描述】:
我有以下简单的组件:
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 的第二个参数传入,但这也没有用。
【问题讨论】:
标签: javascript reactjs typescript react-hooks