我试图通过制作带有可折叠项目的菜单来学习一些React。我使用jQuery作为其slideToggle功能,但我无法让它正常工作。
反应代码的相关部分是:
var CollapsableMenuItem = React.createClass({
toggleDescription: function(el) {
$(el).slideToggle();
},
render: function() {
return (
<li>
<label className='title'
onClick={this.toggleDescription.bind(this)}>
{this.props.item.title}
</label>
<div className='description'>
<label>
{this.props.item.body}
</label>
</div>
</li>
);
}
});
虽然我目前正试图滑动切换&#34;这个&#34;,这需要在将来改变
$(el).parent().find('.description').slideToggle();
因为那是需要滑动切换的实际元素
什么是正确的绑定方式&#34;这[元素]&#34;所以jQuery可以对它进行slideToggling吗?
我目前正在使用this fiddle,其他一些你可以忽略的东西。相关代码位于javascript部分的底部
第二个问题浮现在脑海中:使用jQuery.ready函数来绑定点击事件等是不好的做法......反应?
理论上我可以将每个组件文件的jquery文件与其事件处理程序捆绑在一起。
答案 0 :(得分:5)
React中this
的上下文不是元素,它是React组件。 jQuery并不了解如何将它用作选择器。
您需要使用jQuery获取要控制的元素的引用。
makeTogglable: function(element) {
$element = $(element);
this.toggle = function() {
$element.slideToggle();
};
},
render: function() {
return (
<li>
<label onClick={this.toggle}></label>
<div ref={this.makeTogglable}></div>
</li>
);
}
ref prop接受回调,该回调将在安装组件时运行。 DOM元素将被传递给回调,以便您可以直接使用它。
在这种情况下,我们使用它来创建和公开一个新的this.toggle
方法,该方法在元素上调用.slideToggle
。
最后,我们将新的this.toggle
方法传递给我们想要触发切换的元素的onClick
处理程序。在这种情况下,它是<div>
。