这是我的情况:
<button onClick={this.changeTimerStatus.bind(this)}>makeTimerCliccable</button>
<button onClick={this.state.hasBeenFinished ? this.confirmHandler : (this.state.hasDest == false || this.state.hasDest == undefined ? this.takeTaskHandler : this.finishHandler)}>
我有两个按钮,但我只想有第二个按钮。另外,我想在它们运行时与this.changeTimerStatus.bind(this)
或this.confirmHandler
一起执行this.takeTaskHandler
(第一个按钮上的功能)。我该怎么解决?
答案 0 :(得分:1)
这应该为您做。另外,这里还有一个沙箱,因此您可以看到它的运行情况:https://codesandbox.io/s/hardcore-bassi-2lwbu
<button
onClick={
this.state.hasBeenFinished
? () => {
this.changeTimerStatus();
this.confirmHandler();
}
: !this.state.hasDest
? () => {
this.changeTimerStatus();
this.takeTaskHandler();
}
: this.finishHandler
}
>
Click
</button>
就像其他张贴者所提到的那样,您可以像这样将所有逻辑移到单个事件处理程序中,并将其与事件侦听器配对
handleClick = () => {
this.state.hasBeenFinished
? () => {
this.changeTimerStatus();
this.confirmHandler();
}
: !this.state.hasDest
? () => {
this.changeTimerStatus();
this.takeTaskHandler();
}
: this.finishHandler
}
然后在按钮中:
<button onClick={this.handleClick}>Click</button>
这样做的好处是:
答案 1 :(得分:0)
只需将内容包装在函数中即可。
onClick={e => {
fun1()
fun2()
}}
答案 2 :(得分:0)
这里接受的答案将起作用,但这不是在标记(在本例中为jsx)中使用任何逻辑的好习惯。我建议创建一个处理程序,
class YourComponent extends React.Component {
state = {
// Whatever you store in the state
};
constructor(props) {
super(props);
this.clickHandler = this.clickHandler.bind(this);
}
clickHandler() {
// this.state
// ...logic can go here
// it should be the same logic as it is in the accepted answer
}
render() {
return (
<button type="button" onClick={ this.clickHandler }>
BUTTON
</button>
);
}
}