Reactjs 是否有任何方法可以将按钮处理程序添加到组件中,而不必在每次更新时重新生成函数?
我有一个简单的React组件,我想将其转换为功能组件,但此组件接收id作为道具,我需要为按钮创建处理程序并将此id传递给它。但如果我在组件内创建功能,则会导致重新生成,这是一种不好的做法 我已经尝试过使用useCallback函数,但它只是一个记忆,我想如果下一个值和前一个值不同,函数将重新生成Reactjs 是否有任何方法可以将按钮处理程序添加到组件中,而不必在每次更新时重新生成函数?,reactjs,react-hooks,Reactjs,React Hooks,我有一个简单的React组件,我想将其转换为功能组件,但此组件接收id作为道具,我需要为按钮创建处理程序并将此id传递给它。但如果我在组件内创建功能,则会导致重新生成,这是一种不好的做法 我已经尝试过使用useCallback函数,但它只是一个记忆,我想如果下一个值和前一个值不同,函数将重新生成 // @flow type Props = {| id: string, onClick: (id: string) => void, |}; const Item = ({ id, o
// @flow
type Props = {|
id: string,
onClick: (id: string) => void,
|};
const Item = ({ id, onClick }: Props) => {
const handleClick = useCallback(() => {
onClick(id);
}, [id]);
return (
<Card onClick={handleClick}>
<CardContent />
</Card>
);
};
也许一些ReactHooks会有所帮助,但我没有发现有用的东西。请添加完整的组件,以及它如何接收道具
useCallback
用于创建记忆回调。如果您想记忆该值(恰好是回调),可以使用usemo(()=>()=>onClick(id),[id])
。但在您的情况下,您需要使用@YuryTarabanko,但它只在id不变的情况下才有效。在重新渲染的情况下,组件内部的函数将regenerate@ArtemBalamutyuk不同的id-另一个函数似乎有效。@YuryTarabanko组件接受id并将其传递给onClick函数,因此这是一个函数,它接受一个参数,不应重新生成
items.map(item => <Item id={item.id} onClick={this.handleItemClick} />)