ReactJS将元素拥有的道具传递给函数
ReactJS passing a prop that the element owns to a function
我正试图返回一个带有eventListener的<li>
元素。但我希望<li>
将其拥有的属性传递给onClick函数。这就是我所说的:
return (<li onClick={this.changeTab(tab_id)} tab_id={index + 1} <a href="#">{obj.display_name}</a></li>);
但如果你这样做,你会收到error: Uncaught ReferenceError: tab_id is not defined
如您所见,tab_id
归li
所有。有没有办法让我的组件传递该属性?以下是我的完整上下文组件:
var MainMenu = React.createClass({
changeTab: function(tab_id){
this.props.dprops.changeTab(tab_id)
},
render: function() {
var categories = this.props.groupsData.objects.map(function(obj, index){
return (<li onClick={this.changeTab(tab_id)} tab_id={index + 1} <a href="#">{obj.display_name}</a></li>);
});
return (<ul><li className="active"><a href="#">All Videos</a></li>{categories}</ul></div>
</div>);
}
});
好吧,变量tab_id
在任何地方都不存在。您正在尝试调用this.changeTab(tab_id)
,其中未定义tab_id
。
这里有两个错误:
- 您正试图访问一个未定义的变量
- 您正在调用事件处理程序,而不是将其传递给
onClick
一个简单的解决方案是使用.bind
创建一个带有绑定参数的新函数:
onClick={this.changeTab.bind(this, index + 1)}
缺点是每次组件重新发送时都会创建一个新函数。
您可以通过创建一个表示列表项的组件来解决此问题。该组件会将其tab_id
道具传递给其onClick
道具。
示例:
var ListItem = React.createClass({
_onClick: function() {
this.props.onClick(this.props.tabID);
},
render: function() {
return <li onClick={this._onClick}>{this.props.children}</li>;
}
});
// and in the MainMenu#render method
this.props.groupsData.objects.map(function(obj, index) {
return (
<li onClick={this.changeTab} tabID={index + 1} >
<a href="#">{obj.display_name}</a>
</li>
);
}, this);
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 在函数中添加数组元素的数值
- 如何在DOM元素上按类型构建此函数
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- Rails/Javascript链接到用于切换多个元素的函数
- 如何在HTML元素上创建函数,而不是将元素作为参数传递
- jQuery在元素的上下文中运行函数
- 如何在模板聚合物中使用元素函数
- Append元素在运行两次函数后不显示
- 当元素可见时,jQuery滚动函数会触发一次
- 如何将一个函数附加到一个不存在的元素上
- 将动态元素绑定到函数;只剩下一个绑定
- jQuery body onChange具有多个元素和多个函数
- 使用单击函数中的jQuery切换元素
- toogleClass函数来切换元素类并在事件期间执行某些操作
- 使用返回函数sinde.attr()jquery元素
- 如何获取函数元素中的值
- AngularJS 指令 - 链接函数元素参数在监视函数中不可用
- 如何从由