使用jquery对slideToggle做出反应

时间:2015-11-29 06:07:06

标签: javascript jquery reactjs

我试图通过制作带有可折叠项目的菜单来学习一些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文件与其事件处理程序捆绑在一起。

1 个答案:

答案 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>