当函数传递给子函数时,React onClick事件不触发
React onClick event not firing when function is passed to child
我有一个非常简单的React组件,我将onClick
事件的回调传递给子元素;然而,onClick事件似乎从未触发过。下面是类,HamburgerMenu
和Hamburger
被正确导入/渲染,这些组件上不存在任何事件。
export default class AppHandler extends React.Component {
componentWillMount() {
this.state = {
menuOpen: false
};
}
render() {
return (
<div>
<HamburgerMenu menuOpen={this.state.menuOpen} />
<div className="content">
<nav>
<Hamburger onClick={this.onMenuChange.bind(this)} />
</nav>
</div>
</div>
);
}
onMenuChange() {
console.log('onMenuChanged');
this.setState({ menuOpen: !this.menuOpen });
}
};
我可以让它工作,如果在Hamburger
组件我在根元素上设置另一个onClick
事件,然后设置this.props.onClick
作为事件处理程序,但这似乎是不必要的,从我所看到的一切。
指导吗?谢谢你!
所以这最终是我不理解onClick
事件在哪里得到附加。由于在设置onClick={this.onMenuChange(this)}
时组件本身并不是一个真正的元素,所以我只为子元素Hamburger
设置prop.onClick
。为了实际使绑定工作,我做必须在Hamburger
组件的根元素上设置onClick={this.props.onClick}
。
由于您正在导出ES6类而不使用createClass
,您必须将处理程序绑定到this
:
<Hamburger onClick={this.onMenuChange.bind(this)} />
请参阅React文档关于不自动绑定到ready的原因:
方法遵循与常规ES6类相同的语义,这意味着它们不会自动将其绑定到实例。您必须显式地使用.bind(this)或箭头函数=>。
另外,您的状态有错误。this.setState({ menuOpen: !this.menuOpen });
将设置this.state.menuOpen
,但由于你没有改变prop
,它将永远不会在这里改变:<HamburgerMenu menuOpen={this.menuOpen} />
.
这一行应该是:
<HamburgerMenu menuOpen={this.state.menuOpen} />
// and you should set a default state as well
// in AppHandler
componentWillMount() {
this.state = {
menuOpen: this.props.menuOpen
};
}
在使用组件时不需要绑定this
,在<Hamburger />
组件中绑定this
就足够了。请参阅以下示例代码
import React from 'react';
import Button from 'components/Button';
class App extends React.Component {
handleClick(e){
console.log(e.target);
}
render(){
return (
<Button Text="Save" onClick={this.handleClick} />
);
}
}
//Button Component
class Button extends React.Component {
clickEventHandler(e) {
this.props.onClick(e);
}
render(){
return (
<button onClick="this.clickEventHandler.bind(this)">{this.props.Text}</button>
);
}
}
- 在React中,为什么我必须绑定onClick函数而不是调用它
- ReactJS:如何使用react正确播放带有onClick事件的html5视频
- 如何使用onClick处理程序在React组件中创建链接
- React Bootstrap onClick触发器在复选框上累积(?)并执行多次
- React 渲染一个组件会触发 onClick 事件
- React组件onClick处理程序不工作
- React,将onClick事件直接添加到组件中,而不是在所述组件中渲染元素
- React 组件不会在 onClick 事件后重新渲染
- React JS - 在onClick事件后触发PHP
- 为什么当同级节点的“display”属性发生更改时,React 组件的 onClick 事件处理程序不会触发
- React onClick bind(),其中是点击事件
- onClick=“” 不会出现在用 react 制作的实际元素上
- React onClick函数在渲染到DOM时只触发一次
- 应用样式“;游标:指针”;所有具有onClick功能的React组件
- react js子组件onclick事件未被调用
- React-如何只捕获父对象's onClick事件,而不是子事件
- React.js:handleSubmit或onClick在服务器端渲染时未触发
- 覆盖React OnClick事件,延迟300ms
- 为什么React组件在渲染时启动onClick事件,而不是在单击时启动
- Meteor React组件onClick事件在IE中不起作用