我在和React玩了一会儿,我遇到一个棘手的问题,我想不通。
我有一个笑话组件,该组件基本上应该向const textInputRefs = useRef<(HTMLDivElement | null)[]>([])
...
const onClickFocus = (event: React.BaseSyntheticEvent, index: number) => {
textInputRefs.current[index]?.focus()
};
...
{items.map((item, index) => (
<textInput
inputRef={(ref) => textInputs.current[index] = ref}
/>
<Button
onClick={event => onClickFocus(event, index)}
/>
}
发出请求并显示结果。发出请求并更新我的状态都在一个方法中完成,然后在componentDidMount()方法中调用。
这工作得很好,但是我想让组件在单击时向API发出更多请求,因此我尝试做的是将组件的onClick值设置为等于使XMLHttpRequest的方法。
我的问题是,这样做会使我的页面垃圾邮件成为带有请求的api,因此每单击一次就请求各种笑话,而我只希望每单击一次笑话。
代码在下面:
https://sv443.net/jokeapi/v2
非常感谢你们能给我提供的任何见解:)
答案 0 :(得分:4)
使用onClick={() => this.getJoke()}
或onClick={this.getJoke}
。当前,您在调用render时正在运行此函数,并将其结果分配给onClick。
编辑:
应使用上述版本之一代替onClick={this.getJoke()}
元素上的<div>
。
原因是通过设置onClick={this.getJoke()}
,您告诉React on render调用您的getJoke
方法,并将其结果分配为运行时的onClick
处理程序。现在,由于getJoke()
正在发出请求并设置状态值,因此会发生以下情况:
this.getJoke()
that.setState({ joke: this.response })
onClick={this.getJoke()}
,因此将调用您的方法。