[英]OnClick is not working, but no errors appear in the console
由于我目前正在学习 React,所以我正在创建一个笑话生成器。 我创建了一个本地文件并能够提取数据(笑话)并将其显示在浏览器上。 现在,我正在尝试创建一个按钮,当您单击该按钮时,它会显示一个随机笑话。 我可以看到笑话和按钮,但没有触发任何操作。 我检查了控制台,没有错误。 如果我使用onClick = {randomJoke}
,那么我会收到一条错误消息,说听众期待的是 function,而不是 object。有人可以帮我指出问题所在吗?
这就是我目前的设置方式:
import React from 'react'
import SportsJokesData from './SportsJokesData';
class SportsJokesApi extends React.Component {
constructor(props){
super(props);
this.getRandomJoke = this.getRandomJoke.bind(this);
}
getRandomJoke(){
return SportsJokesData[(SportsJokesData.length * Math.random()) << 0]
}
render() {
const randomJoke = this.getRandomJoke()
return (
<React.Fragment>
<p> {randomJoke.question}</p>
<p>{randomJoke.answer}</p>
<button onClick={this.getRandomJoke}>
click here
</button>
</React.Fragment>
)
}
}
export default SportsJokesApi;
这是在添加按钮之前文件最初编写脚本的方式。
import React from 'react'
import SportsJokesData from './SportsJokesData';
class SportsJokesApi extends React.Component {
getRandomJoke(){
return SportsJokesData[(SportsJokesData.length * Math.random()) << 0]
}
render() {
const randomJoke = this.getRandomJoke()
return (
<React.Fragment>
<p>{randomJoke.question}</p>
<h1>{randomJoke.answer}</h1>
</React.Fragment>
)
}
}
export default SportsJokesApi;
您不能只在onClick
事件上return
一个新组件。 您需要先设置一些 state。 本指南很有用: https://flaviocopes.com/react-show-different-component-on-click/
当出现新笑话时,你需要重新渲染你的 React 组件。 为此,将randomJoke
存储在 React 组件的state
中。
当您调用this.getRandomJoke
时,您应该同时更新state
,以便触发 React 组件的重新渲染。 发生这种情况时,UI 将更新为randomJoke
的最新值
import React from 'react' import SportsJokesData from './SportsJokesData'; const initialState = { randomJoke: null }; class SportsJokesApi extends React.Component { constructor(props) { super(props); this.getRandomJoke = this.getRandomJoke.bind(this); this.state = initialState; } getRandomJoke() { this.setState({ randomJoke: SportsJokesData[(SportsJokesData.length * Math.random()) << 0] }); } render() { const { randomJoke } = this.state; return ( <React.Fragment > <p> {randomJoke.question} </p> <p> {randomJoke.answer} </p> <button onClick = {this.getRandomJoke}>click here </button> </React.Fragment > ); } } export default SportsJokesApi;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.