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

Rob*_*bin 0 html javascript 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);
Run Code Online (Sandbox Code Playgroud)

Ros*_*len 5

您的应用应该是数据驱动的,这意味着您的应用状态保持在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);
Run Code Online (Sandbox Code Playgroud)