【问题标题】:cannot get Foundation menu to work with reactJS无法让 Foundation 菜单与 reactJS 一起使用
【发布时间】:2016-03-20 03:46:14
【问题描述】:

我不明白为什么下面的代码不会为我创建基础菜单。下面是我的代码的超级简化版:

        var MenuDisplay = React.createClass({

            render: function(){
                console.log("menu display render");
                var menu = (true)?
                <ul className="dropdown menu" data-dropdown-menu>
                            <li>
                                <a id="profile_name">Welcome
                                </a><ul className="menu">
                                    <li>profile</li>
                                    <li className="logout">logout</li>
                                </ul>
                            </li>
                        </ul>
                        : null;
                return(
        <div>
                    {menu}
                    <FoundationPlugin />
                    </div>
                )
            }
        });

        var FoundationPlugin = React.createClass({
            render: function(){
                //applying foundation() the whole document 
                $(document).foundation();
                return(
                    <div></div>
                );
            }
        });

        React.render(
            <MenuDisplay />,
            document.getElementById('myDiv')
        );
  • jsx 或 html 设置没有任何问题,我在“普通”html 中对其进行了测试,并在菜单上运行 $().foundation。它正确显示菜单

  • 如果我在所有代码之后应用 .Foundation(),而不是在 FoundationPlugin 组件内部,则上面的代码可以工作。 但是我必须这样做。原因是我首先从 RestApi 获取数据,这需要一些时间。如果我把 $().foundation() 放在外面,当它碰到 $().Foundation() 时,我的组件仍然没有获取数据并且没有呈现正确的 html 标签。我必须在所有渲染完成后运行 $().foundation。

【问题讨论】:

    标签: javascript html reactjs zurb-foundation


    【解决方案1】:

    React 组件有几个生命周期函数。如果您需要等待渲染完成并更新实际的 DOM,那么componentDidMount 就是您所需要的。

    var MenuDisplay = React.createClass({
      componentDidMount: function(){
        // Do stuff that relies on your DOM being rendered here.
        // Usually anything related to external libs like jQuery etc.
      },
      render: function(){
        ....
        ....
      }
    })
    

    希望这会有所帮助。

    【讨论】:

    • 嘿,感谢您为我指明了正确的方向!虽然 componentDidMount 在我的情况下不起作用,但 componentDidUpdate 工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2019-02-17
    • 2014-10-31
    • 2018-01-02
    相关资源
    最近更新 更多