【发布时间】:2022-08-19 22:58:27
【问题描述】:
在下面的 React 组件中,我正在使用 Apollo Client fetchMore function 获取更多项目。
在这里使用React useCallback hook 的目的究竟是什么?在这种情况下使用它是个好主意吗?
const Carousel = ({ data: blockData, metadata }: Props) => {
const { data, fetchMore, networkStatus } = useQuery<
GqlRes,
>(GET_NODES, {
variables: {
offset
limit
},
errorPolicy: \'all\',
notifyOnNetworkStatusChange: true,
ssr: false,
});
const fetchNextPage = useCallback(() => {
return fetchMore({
variables: {
offset: data?.getNodes.nodes.length,
},
});
}, [data, fetchMore]);
const items =
data?.getNodes.nodes
.map((node) => {
return {
id: node.id,
title: node.title,
};
}) || [];
return (
<Carousel
items={items}
onEnd={() => {
if (data?.getNodes.pager?.hasNextPage) {
fetchNextPage();
}
}}
/>
)
};
export default Carousel;
-
当您有一个子组件在不需要的情况下一次又一次地重新渲染时,使用 useCallback 挂钩。传递一个内联回调和一组依赖项。 useCallback 将返回回调的记忆版本,仅当其中一个依赖项发生更改时才会更改。
-
在这里使用
useCallback毫无意义,因为无论如何您在每次渲染时都将一个新函数传递给Carousel。useCallback如果您将函数传递给子组件并且只想在函数使用的任何数据发生更改时传递新的函数对象,则很有用。这允许子组件进行优化。 -
@Felix Kling 和内部
Carousel有另一个<Child />onEnd通过。这有什么区别吗?回答抱歉,您能否给出一个明确的用例何时使用它?
标签: reactjs usecallback