【问题标题】:Render new element onClick in react.js在 react.js 中渲染新元素 onClick
【发布时间】:2015-04-22 23:04:21
【问题描述】:

我是新手,我正在尝试在点击时渲染一个新元素:

      var LoginButton = React.createClass({
       ..............
       ..............
      clickHandle : function() {
        this.rememberMe = {
            active: localforage.getItem('rememberMe', function (err, key) {
                return key;
            })
        };
        if (this.rememberMe.active == true || this.rememberMe.active == 'checked')
        {
            document.getElementById('loginForm').submit();
        }
        else {
            React.render(<wantToRemember />, document.getElementById('loginbuttonhere'));
        }
        return this.rememberMe.active;

    },

这是应该出现的元素:

var wantToRemember = React.createClass({
        getInitialState : function () {
            return {
                position: 'absolute',
                display: 'block',
                top: '20px',
                width: '100px',
                height: '100px'
            }
        },

        render : function () {
            return (
                    <div className="rememberPopup" style={this.state}>
                        <div className="row">
                            <div className="staylogin">
                                <div className="col-md-4">
                                    <label for="checkbox">Angemeldet bleiben</label>
                                </div>
                                <div className="col-md-1">
                                    <input type="checkbox" id="checkbox" name="remember" />
                                    </div>
                                </div>
                            </div>
                    </div>
            );
        }
    });

但它没有出现,而是 react 渲染了这个 html:

<wanttoremember data-reactid=".1"></wanttoremember>

我很确定我做错了一些非常基本的事情,但不知道是什么。就不能这样调用不同的元素吗?

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您的 react.js 组件名称以小写字母开头,应以大写字母开头:var WantToRemember = React.createClass(...)React.render(&lt;WantToRemember /&gt;,...

    JSX 编译器要求组件名称以大写字母开头(参见jsx docs on this):

    要渲染一个 React 组件,只需创建一个以大写字母开头的局部变量:

    var MyComponent = React.createClass({/*...*/});
    var myElement = <MyComponent someProperty={true} />;
    React.render(myElement, document.getElementById('example'));
    

    【讨论】:

      【解决方案2】:

      您应该将 React 元素传递给 React.render 而不是标签本身,如下所示:

      React.render(
        React.createElement(wantToRemember)
      );
      

      【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2014-08-21
      • 2017-05-08
      • 2015-07-14
      • 2019-01-13
      • 1970-01-01
      • 2021-08-05
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多