/** @jsx React.DOM */
var Button = React.createClass({
handleClick: function(){
console.log(' FROM BUTTON')
},
render: function() {
return <input type='button' onClick={this.handleClick} value={this.props.dname}/>;
}
});
var Text = React.createClass({
render: function() {
return <input type='text' onClick={this.handleClick} value={this.props.ival}/>;
}
});
var search = React.createClass({
handleClick: function() {
console.log('searching')
},
render: function(){
return (
<div>
<Text/>
<Button dname={this.props.dname} onClick={this.handleClick} />
</div>
);
}
});
React.renderComponent(<search dname='Look up' fname='Search'/> , document.body);
我创建了一个按钮和文本组件,并将它们包含在搜索组件中,现在我想要使用搜索组件的处理程序覆盖按钮的默认handleClick事件。 但是this.handleClick指向按钮组件的事件处理程序..请帮助.. 我需要从点击搜索而不是我从FROM按钮..
答案 0 :(得分:4)
你占99%。
React使用one-way data-flow。因此,嵌套组件上的事件不会传播给其父组件。
您必须手动传播事件
更改您的<Button>
handleClick
函数,以调用从this.props.handleClick
父级传入的<Search>
函数:
var Button = React.createClass({
handleClick: function () {
this.props.onClick();
},
...
});
附件是您原始帖子的小提琴,带有所需的更改。它现在不会记录FROM BUTTON
,而是提醒searching
。
答案 1 :(得分:1)
您需要更改Button
组件以允许此类行为:
var Button = React.createClass({
handleClick: function(){
console.log(' FROM BUTTON')
},
render: function() {
return (
<input type='button'
onClick={this.props.onClick || this.handleClick}
value={this.props.dname} />
);
}
});
请注意onClick={this.props.onClick || this.handleClick}
。
这样,如果您在实例化onClick
时传递Button
道具,则会优先于Button
的{{1}}方法。
答案 2 :(得分:0)
或者如果您可以同时执行它们,则可以放
UNION
};
您将检查对象是否具有指定的属性并运行它