gpt4 book ai didi

javascript - 如何在使用 useCallback 时内存高阶函数?

转载 作者:行者123 更新时间:2023-12-05 09:07:47 26 4
gpt4 key购买 nike

使用 React Hooks,当我们想要记住函数的创建时,我们有 useCallback 钩子(Hook)。这样我们就有了:

const MyComponent = ({ dependancies }) => {
const memoizedFn = useCallback(() => {
/* ... */
}, [dependancies]);

return <ChildComponent onClick={memoizedFn} />;
}

我的问题是,我们如何在 useCallback Hook 中记住高阶函数的值,例如:

const MyComponent => ({ dependancies, anArray }) => {
const memoizedFnCreator = useCallback((id) => () => {
/* ... */
}, [dependancies]);

/*
* How do we make sure calling "memoizedFnCreator" does not result in
* the ChildComponent rerendering due to a new function being created?
*/
return (
<div>
{anArray.map(({ id }) => (
<ChildComponent key={id} onClick={memoizedFnCreator(id)} />
))}
</div>
);
}

最佳答案

除了在 HoC 中传递“创建者函数”之外,您还可以传递一个接受 id 作为参数的函数,并让 ChildComponent 创建它自己的点击处理程序

在下面的代码示例中,请注意 MyComponent 中的 onClick 不再创建唯一的函数,而是在所有映射元素中重用相同的函数,但是 ChildComponent 创建一个独特的函数。

const ChildComponent = ({ itemId, onClick }) => {
// Create a onClick handler when calls `onClick` with the item's id
const handleClick = useCallback(() => {
onClick(itemId)
}, [onClick, itemId])

return <button onClick={handleClick}>Click me</button>
}

const MyComponent = ({ dependancies, anArray }) => {
// Memoize a function which takes in the id and performs some action
const handleItemClick = useCallback((id) => {
/* ... */
}, [dependancies]);

return (
<div>
{anArray.map(({ id }) => (
<ChildComponent key={id} itemId={id} onClick={handleItemClick} />
))}
</div>
);
}

关于javascript - 如何在使用 useCallback 时内存高阶函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64426610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com