在 ReactJs 中添加多个 div 或渲染

Adding multiple divs or renders in ReactJs

我在想要创建我在某个 class 中渲染的相同 html 的倍数时遇到了麻烦。例如,我有一个 div 可能看起来像这样

[Header 在这里,是一个输入字段] [下拉] [文本区域]

[提交]

[添加另一个字段]

关于添加另一个字段,我想克隆此视图并能够再次添加同样多的字段。

这是我目前的情况:

var UpdateForm = React.createClass({

    handleSubmit : function(e) {
      e.preventDefault();
    var title = React.findDOMNode(this.refs.title).value.trim();
    var date   = React.findDOMNode(this.refs.date).value.trim();
    var body  = React.findDOMNode(this.refs.body).value.trim();



    if(!title||!date || !body ) {
        return;
    }

    this.props.onSubmit({title:title, date : date, body : body});

        React.findDOMNode(this.refs.title).value = '';
        React.findDOMNode(this.refs.date).value = '';
        React.findDOMNode(this.refs.body).value = '';
        //React.findDOMNode(this.refs.sub).value = '';

    },

    render: function() {

    return(
    <div id = "This is what I want to duplicate on each button click">
        <form className="form-horizontal" onSubmit={this.handleSubmit}>
        <div class="form-control">
        <label className="col-sm-0 control-label ">Title:</label>
        <div class="col-sm-5">
        <input className = "form-control" type = "text" placeholder="Title...." ref = "title"/>
        </div>
        </div>
        <div class="form-control">
        <label className="col-sm-0 control-label ">Date:</label>
        <div class="col-sm-5">
        <input className = "form-control" type = "text" placeholder="Date...." ref = "date"/>
        </div>
        </div>
        <div className="form">
        <label htmlFor="body" className="col-sm-0 control-label">Report Body:</label>
        <div className="column">
        <textarea className = "ckeditor" id = "ckedit"   ref = "body"></textarea>

        </div>
        </div>



        <div class="form-group">
        <label className="col-sm-0 control-label"></label>
        <div class="col-sm-5">
        <input type = "submit" value="Save Changes" className = "btn btn-primary" />
        </div>
        </div>
        </form>

    <div className="btn-group">
    <button type="button" className="btn btn-danger">Assign to</button>
    <button type="button" className="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        <span className="caret"></span>
        <span className="sr-only">Toggle Dropdown</span>
    </button>
    <ul className="dropdown-menu">
    {
        this.props.forms.map(function(form){

    return (
    <li><a href ="#">{form}</a></li>


  )})}
    </ul>
    <button className="btn btn-success btn-block" onClick={this.addInputField}>Add Subform</button>
    </div>
        </div>
);
}
});

我觉得需要补充的:

addDiv: function(e) {
        e.preventDefault();
        //have a array of divs?
        //push a the same div into it?
        //then set state of that array?

    }

我在 jquery 中知道我可以只编写一个函数在我点击按钮时附加此标记,但我根本不知道如何在这里考虑它。

认为你想要的是有一个按钮,可以将另一个header-date-body-Component添加到表单,然后也应该提交,对吧?

如果是这样,那么您需要更多地考虑组件。有一个处理表单的组件。有一个处理添加其他形式的东西。

<ReportDialog>
  <ReportForm>
  <ReportForm>
  <button onClick={this.addReport}>Add another</button>
</ReportDialog>

要完成多个 ReportForms,您需要考虑组件中的数据,即报告(我假设)。因此,您需要 ReportDialog 中的一个状态来跟踪您的报告。所以在应用程序开始时你有一份报告:

getInitialState: function () {
  return {
    reports: [{ title: '', body: '', date: new Date() }]
  };
}

因此在 addReport 中您需要更改状态并添加另一个报告。要呈现这些报告,您已经使用了 map,但这次您需要遍历组件中的报告,并为每个报告 return 一个 ReportForm