为 react-bootstrap 的 FormControl 指定默认值

Specify default value to FormControl of react-bootstrap

react-bootstrap@0.24.5 中,我使用 Input 属性 defaultValue 来指定在组合框

中选择的起始值
<Input type='select'
             ref='templateSelect'
             defaultValue={this.state.templateId}
             onChange={this.handleTemplateChange}>
   {options}
</Input>

如何在 react-bootstrap@0.30.7(最新的)中处理此问题,其中 Input 已被弃用,而应在此处使用的新组件 FormControl 不提供此类属性?

应该使用 value 吗?

<FormControl type='select'
             ref='templateSelect'
             value={this.state.templateId}
             onChange={this.handleTemplateChange}>
   {options}
</FormControl>

或者可能是这样的:

value={this.state.templateId || 'default value'}

我没有测试这个,但是从 React Bootstrap source code for FormControl 看来使用 defaultValue prop 应该有效:

<FormControl type="select"
  ref="templateSelect"
  defaultValue={this.state.templateId}
  onChange={this.handleTemplateChange}>
   {options}
</FormControl>

If multi select defaultValue 必须是数组:

this.state = {
  templateId:['some value']
}
<FormControl 
  multiple
  type="select"
  ref="templateSelect"
  defaultValue={this.state.templateId}
  onChange={this.handleTemplateChange}>
   {options}
</FormControl>

对于 "react-bootstrap": "1.0.0-beta.14",使用 value 道具:

<Form.Control as="select" value={user}>
    { users.map(opt => (<option>{ opt }</option>)) }
</Form.Control>

这样就可以设置默认值了。

                <option  >is any default</option>
                {

                    dataoption.map(item => {

                        return <option key={item.Value} vlaue={item.Value} selected={defaultselect ? defaultselect == item.Value ? true : false : false}  >{item.Text}</option>
                    })
                }

            </FormControl>

您可能会在控制台中收到错误消息:

警告:使用 defaultValuevalue 道具而不是设置 selected on .

但是设置 defaultValue 或 value 并不能解决你的问题

(您好 Google 员工!)

如果您试图将一组选项加载到 Form-Control(通过网络调用、promise 或其他异步函数),请确保在选项-阵列已完全加载。否则默认值将不起作用。

(对于 react-bootstrap 1.0.0-beta.8 是正确的。您的里程可能会谨慎。)