javascript - 如何使用一个组件在reactjs中渲染多个html片段?

标签 javascript html reactjs

我那里有一个按钮,当我单击这个按钮时,我想渲染一个 div 并将其附加到 body 中。

当我再次单击此按钮时,将呈现一个新的 div

我想要:点击按钮多少次,渲染多少div

以下代码只能渲染一个div:( jsFiddle: http://jsfiddle.net/pw4yq/ )

var $tool = document.getElementById('tool');
var $main = document.getElementById('main');

var partBox = React.createClass({displayName: 'partBox',
    render: function(){
        return (
            React.DOM.div({className:"box"}, "HELLO! ", this.props.ts)
        )
    }
});

var createBoxBtn = React.createClass({displayName: 'createBoxBtn',

    createBox: function(){
        var timeStamp = new Date().getTime();
        React.renderComponent(partBox( {ts:timeStamp} ), $main);
    },

    render: function(){
        return (
            React.DOM.button( {onClick:this.createBox}, "createBox")
        )
    }
});

React.renderComponent(createBoxBtn(null ), $tool);

最佳答案

您的应用程序应该是数据驱动的,这意味着您的应用程序的状态保存在 DOM 之外。在您的示例中,您本质上是保留一个 Date 对象列表。将其置于可以修改的状态,并为您创建的每个 Date 对象呈现一个框:

工作中的 JSFiddle: http://jsfiddle.net/pw4yq/6/

var $main = document.getElementById('main');

var partBox = React.createClass({displayName: 'partBox',
    render: function(){
        return (
            React.DOM.div({className:"box"}, "HELLO! ", this.props.ts)
        )
    }
});

var createBoxBtn = React.createClass({displayName: 'createBoxBtn',

    createBox: function(){
        var timeStamp = new Date().getTime();
        this.props.onClick({ts: timeStamp});
    },

    render: function(){
        return (
            React.DOM.button({onClick: this.createBox}, "createBox")
        )
    }
});

var app = React.createClass({
    displayName: "app",

    getInitialState: function() {
        return {
            partBoxes: []
        };
    },

    createBox: function(partBox) {
        this.state.partBoxes.push(partBox);
        this.forceUpdate();
    },

    render: function() {
        return (
            React.DOM.div(null,
                createBoxBtn({onClick: this.createBox}),
                this.state.partBoxes.map(function(pb) {
                    return partBox({key: pb.ts, ts: pb.ts});
                })
            )
        );
    }
});


React.renderComponent(app(null), $main);

关于javascript - 如何使用一个组件在reactjs中渲染多个html片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627105/

相关文章:

javascript - 使用 anchor 标记或输入标记打开计算机上的特定位置

javascript - 在预填表格上显示/隐藏

javascript - 单击图像后如何播放/启动 vimeo 视频?

javascript - React router最新版本中,如何在首页嵌套路由 "/"

javascript - jQuery animate 链接在运行时更改动画速度

javascript - 带有复选框的双向绑定(bind)总是返回 "on"

html - 我如何让我的菜单正确生成

html - 在 IE8 中删除表单后的空格

javascript - 等待所有setStates完成更新

javascript - 如果选择所有值,则显示列表中的所有结果