带有图标的 React-Bootstrap FormControl

Posted

技术标签:

【中文标题】带有图标的 React-Bootstrap FormControl【英文标题】:React-Bootstrap FormControl with Icon 【发布时间】:2017-10-12 07:30:50 【问题描述】:

我正在尝试使用 React Bootstrap 和 react-fa (font-awesome) 将图标添加到输入字段。我可以在表单控件组件上设置一个道具吗?下面的代码我已经插入了一个图标,但它显然是在输入上方而不是里面。

<form>
    <FormGroup
        controlId="formBasicText"
        validationState=this.getValidationState()
        className="login-form">
        <ControlLabel>Email address</ControlLabel>
        <Icon spin name="spinner" />
        <FormControl
            type="text"
            value=this.state.value
            placeholder="Your email"
            onChange=this.handleChange
            className="login-input" />
        <ControlLabel>Password</ControlLabel>
        <FormControl
            type="text"
            value=this.state.value
            placeholder="Your password"
            onChange=this.handleChange
            className="login-input" />
        <FormControl.Feedback />
    </FormGroup>
    <Button bsStyle="success btn-raised btn-block" bsSize="large" onClick=this.closeModal>Let's Go</Button>
</form>

【问题讨论】:

【参考方案1】:

有一个快速简便的“开箱即用”解决方案。 只需将您的&lt;Form.Control&gt; 包裹在&lt;InputGroup&gt; 中并添加一个&lt;InputGroup.Prepend&gt;,其中将包含您希望包含的图标。 &lt;InputGroup.Prepend&gt;的内容不受限制,可以是文字、符号、其他组件等。

请记住,由于我们可能使用了不同版本的 react-bootstrap,因此语法发生了一些变化。

我包含了我的代码示例,它在文本输入字段中使用了 react-fontawesome 图标。

                 <Form.Row>
                    <Form.Group as=Col>
                        <InputGroup>
                            <InputGroup.Prepend>
                                <InputGroup.Text>
                                    <FontAwesomeIcon icon="search" />
                                </InputGroup.Text>
                            </InputGroup.Prepend>
                            <Form.Control
                                type="text"
                                placeholder="Search here.."
                            />
                        </InputGroup>
                    </Form.Group>
                </Form.Row>

看起来像这样:

可以在here 找到 react-bootstrap 的官方示例。 希望有帮助!干杯!

PS:使用的库 “反应引导”:“^1.0.0-beta.8”(引导 4.3)和 "@fortawesome/react-fontawesome": "^0.1.4"

【讨论】:

【参考方案2】:

根据docs,它看起来不像react-bootstrap 支持font-awesome 开箱即用的图标。但是,您似乎可以作弊。可以将&lt;FontAwesome&gt; 控件放在&lt;FormControl.Feedback&gt; react-bootstrap 控件中,并让它在文本框中显示图标。

我使用react-bootstrap 0.31.0 版对此进行了测试。我还使用了react-fontawesome NPM 包 (here) 来实际添加图标。您将执行以下操作:

<ControlLabel>Email address</ControlLabel>
<FormControl
    type="text"
    value=this.state.value
    placeholder="Your email"
    onChange=this.handleChange
    className="login-input"
/>
<FormControl.Feedback>
    <span style= top: '5px' >
        <FontAwesome name="check" spin key="icon" />
    </span>
</FormControl.Feedback>

需要添加&lt;span&gt; 和内联样式才能使图标正确居中。我怀疑这是必要的,因为我违反了&lt;FormControl.Feedback&gt; 如何呈现图标的一些规则。当我改用&lt;Glyphicon&gt; 时,不需要这样做。不幸的是,&lt;Glyphicon&gt; 没有内置的自旋/旋转功能。

有点黑,所以谨慎使用。

【讨论】:

【参考方案3】:

我只使用引导程序和包图标(react-icons)

<div className="input-group col-md-4">
                <input className="form-control py-2 border-right-0 border" type="search" defaultValue="search" id="example-search-input" />
                <span className="input-group-append">
                <div className="btn btn-outline-secondary border-left-0 border">
                <FaBeer/>
                </div>
                </span>
            </div>

【讨论】:

【参考方案4】:

不幸的是,React Bootstrap 没有开箱即用的输入组件图标道具。或者,React Semantic UI 确实有一个用于输入的道具图标。请参阅此处的文档:https://react.semantic-ui.com/elements/input/

如果您仍想使用 React Bootstrap,您可以在 InputGroup 中创建一个 div 元素,并将该元素的样式设置为 position: absolute 并使用 topright css 元素根据需要进行调整。解决方法如下:

//Your JSX file

      <InputGroup>
        <FormControl
          type="text"
          placeholder="Search..."
          onChange=this.handleChange.bind(this)
        />
        <div className="search-icon">
          <i class="fas fa-search" />
        </div>
      </InputGroup>

//CSS

.search-icon 
  position: absolute;
  right: 5px;
  top: 5px;
  z-index: 9999; /*this will keep the icon appearing all time, even when on input::focus*/

【讨论】:

问题是如何用 react-bootstrap 来做。不是哪个框架能够添加图标..

以上是关于带有图标的 React-Bootstrap FormControl的主要内容,如果未能解决你的问题,请参考以下文章

通常如何在 react-bootstrap 或 bootstrap 中显示带有尾随空格的变量?

如何将带有子项的 react-bootstrap 组件导入 kotlin-js react app

使用带有打字稿的 react-bootstrap Form.Label 时出现类型错误

如何使用 React-Bootstrap 根据项目计数创建带有拼接的轮播项目

带有 react-router-dom NavLinks 的 react-bootstrap 导航栏中的 collapseOnSelect

可以使用 React-bootstrap 进行 PurgeCSS 吗?