Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 是否有任何方法可以将按钮处理程序添加到组件中,而不必在每次更新时重新生成函数?_Reactjs_React Hooks - Fatal编程技术网

Reactjs 是否有任何方法可以将按钮处理程序添加到组件中,而不必在每次更新时重新生成函数?

Reactjs 是否有任何方法可以将按钮处理程序添加到组件中,而不必在每次更新时重新生成函数?,reactjs,react-hooks,Reactjs,React Hooks,我有一个简单的React组件,我想将其转换为功能组件,但此组件接收id作为道具,我需要为按钮创建处理程序并将此id传递给它。但如果我在组件内创建功能,则会导致重新生成,这是一种不好的做法 我已经尝试过使用useCallback函数,但它只是一个记忆,我想如果下一个值和前一个值不同,函数将重新生成 // @flow type Props = {| id: string, onClick: (id: string) => void, |}; const Item = ({ id, o

我有一个简单的React组件,我想将其转换为功能组件,但此组件接收id作为道具,我需要为按钮创建处理程序并将此id传递给它。但如果我在组件内创建功能,则会导致重新生成,这是一种不好的做法

我已经尝试过使用useCallback函数,但它只是一个记忆,我想如果下一个值和前一个值不同,函数将重新生成

// @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} />)