【问题标题】:react using jquery to slideToggle使用 jquery 对 slideToggle 做出反应
【发布时间】:2015-11-29 14:42:13
【问题描述】:

我正在尝试通过制作带有可折叠项目的菜单来学习一些 React。我将 jQuery 用于它的 slideToggle 功能,但我无法让它正常工作。

react 代码的相关部分是这样的:

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>
        );
    }
});

虽然我目前正在尝试滑动切换“this”,但将来需要更改为

$(el).parent().find('.description').slideToggle();

因为这是需要滑动切换的实际元素

绑定“this [element]”的正确方法是什么,以便 jQuery 可以对其进行 slideToggling?

我目前正在使用this fiddle,其中还有一些其他内容您可以忽略。相关代码在javascript部分的底部

想到的第二个问题:使用 jQuery.ready 函数将点击事件等绑定到 react 是不好的做法吗?

理论上,我可以将一个 jquery 文件与每个组件文件及其事件处理程序捆绑在一起。

【问题讨论】:

    标签: javascript jquery reactjs


    【解决方案1】:

    this 在 React 中的上下文不是元素,而是 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 处理程序。在这种情况下,它是&lt;div&gt;

    【讨论】:

    • 感谢您的帮助! (你们有没有机会招聘:)?)
    • 实际上它不起作用,这是更新代码的小提琴:jsfiddle.net/kb3gN/13031
    • 确保您使用的是最新版本的 React。我认为 jsfiddle 默认使用旧的——是的,我们正在招聘。如果您有兴趣,请通过 dan@astraldynamics.co.uk 与我联系。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2021-02-18
    • 2017-11-08
    • 2017-07-28
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多