必须单击两次才能在React中执行一个方法

时间:2016-10-25 13:36:17

标签: javascript jquery reactjs meteor materialize

嘿,我目前正在研究Meteor和React的一个项目,而我目前正在使用Materialize为前端设计样式。要使下拉列表和侧导航工作,我需要在某些方法中添加一些jquery行。 这里的问题是我需要点击按钮两次才能下拉和侧边栏激活或显示自己,但是在我第一次点击两次后它只需点击一下就能工作。 这些是方法:

showDropdown(){
    $(".dropdown-button").dropdown();
}

collapse(){
    $('.button-collapse').sideNav({ menuWidth: 300, closeOnClick: true });
}

构造

export default class Navigation extends TrackerReact(React.Component) {
constructor() {
    super();
    this.showDropdown= this.showDropdown.bind(this);
    this.collapse = this.collapse.bind(this);
}

这就是我在渲染中使用这些方法的地方:

render(){
    var navOptions;
    if (Roles.userIsInRole(Meteor.user(), 'user')){
        navOptions = (
            <div>
        <nav>
            <div className="nav-wrapper">
                <a href="/" className="brand-logo">SeniorSmart</a>
                <a href="" onClick={this.collapse} data-activates="mobile-demo"  className="button-collapse"><i className="material-icons">menu</i></a>
                <ul id="nav-mobile" className="right hide-on-med-and-down">
                    <li><a href="/">Hjem</a></li>
                    <li><a className='dropdown-button' href='' onClick={this.showDropdown} data-activates='dropdown1'>Drop Me!</a></li>
                    <li><a href="collapsible.html">JavaScript</a></li>
                </ul>
            </div>
        </nav>
                <ul id="dropdown1" className="dropdown-content">
                    <li><a href="/finn_aktiviteter">Finn aktiviteter</a></li>
                    <li><a href="#">Mine venners aktiviteter</a></li>
                    <li><a href="#">Mine påmeldinger</a></li>
                    <li><a href="/opprett_aktivitet">Opprett aktivitet</a></li>
                </ul>
                <ul className="side-nav" id="mobile-demo">
                    <li><a href="sass.html">Sass</a></li>
                    <li><a href="badges.html">Components</a></li>
                    <li><a href="collapsible.html">Javascript</a></li>
                    <li><a href="mobile.html">Mobile</a></li>
                </ul>
            </div>
    )

1 个答案:

答案 0 :(得分:0)

您必须单击两次,因为需要初始化这些jQuery插件。你第一次点击它们,然后它们只是正常工作,所有其他点击都来了。

为避免这种情况,您应该在componentDidMount内初始化这些插件,但您必须确保将要使用的DOM元素放在屏幕上。

正如我在您的代码中看到的那样,仅当登录用户具有用户角色时才会呈现导航。因此,如果用户没有该角色,则不会渲染nav元素,因为无法初始化插件。