如何清除'React boostrap-validation'表格?

How to clear a 'React boostrap-validation' form?

我在页面上有一个表单,表单提交按钮正在向页面添加行 - 在页面本身最终关闭之前可以重复执行此操作

<div className="panel-body line-items">
     {/* A line-item row for each existing line item.  These update if they are typed in... */}
     {this.state.lineItems.map( (li, index) =>
         <LineItem key={index} item={li} } />
     )}
     {/* And a line-item form where we can add another one...*/}
     <CreateLineItemForm onSubmit={this.submitLineItem.bind(this)}/>
 </div>

表单如下所示:

const CreateLineItemForm = ({onSubmit}) => (
    <Form onValidSubmit={onSubmit} className="panel form-horizontal">
        <div className="line-item line-item-input-row">
           <ValidatedInput type="text" name="summary"/>
           $<ValidatedInput type="number" name="cost"/>
           <Button type="submit" id="createLineItem" className="btn">
              <i className="fa fa-plus-square fa-lg"/></Button>
        </div>
    </Form>
)
表单上的

submitLineItem() 将由 summarycost 输入定义的订单项添加到 this.state,这会导致使用该新订单项重新呈现出现在 line-items 面板中。

这一切都按我想要的方式工作,除了表单输入字段("summary" 和 "cost")在我按下按钮时没有被清除。这意味着在输入第一行后,这些输入始终包含新创建的订单项行的 "duplicate"。

如何清除这些表单字段(作为 submitLineItem() 的一部分或其他方式)?

<Form><ValidatedInput> 来自 react-bootstrap-validation.

如果您发现自己一遍又一遍地重复一组代码,那么这通常是一个很好的组件候选者。为什么不打破

<div key={index}>
    <Input type="text" name={"lineItem"+index} value={li.summary} onChange={this.onLineItemDescriptionChange.bind(this, index)}/>
   $<Input type="number" step="0.01" wrapperClassName="line-item-cost" name={"lineItemCost"+index} value={li.cost}
onChange={this.onLineItemValueChange.bind(this, index)}/>
</div>

例如:

   React.createClass({
     getInitialState() {
       return {
        someState: true
       }
     }
     render() {
      return (
        <div key={index}>
         <Input type="text" name={"lineItem"+index} value={li.summary} onChange={this.onLineItemDescriptionChange.bind(this, index)}/>
         $<Input type="number" step="0.01" wrapperClassName="line-item-cost" name={"lineItemCost"+index} value={li.cost}
        onChange={this.onLineItemValueChange.bind(this, index)}/>
        </div>
      )
     }
   })

如果您希望重置最初保存数据的表单的状态,您可以在创建处理程序中轻松完成。如果可能的话,您可能希望将它分配给一个按钮或被点击的东西。我相信你也可以听 return keyUp。

function handleCreateNewLineItem(e) {
  e.preventDefault() // if using a form element
  // update your state
  this.setState({
     li.cost: 0,
     li.summary: ''
  })
}

进入一个组件,给它默认的道具或初始状态,然后当你创建一个新的时,它将是 empty/cleared?