【问题标题】:How to use react-select with react-bootstrap to get the values如何使用 react-select 和 react-bootstrap 来获取值
【发布时间】:2021-06-14 10:17:12
【问题描述】:

我正在用 ReactJS 开发一个应用程序,我有以下代码:

import React, { useState, useEffect } from "react";
import {Form } from "react-bootstrap";
import Select from "react-select";

const App = () => {

    const [validated, setValidated] = useState(false);

    const [select, setSelect] = useState({
        name: "",
        category: ""
    });

    const handleChange = e => {
        const {name, value} = e.target;
        setSelect(prevState => ({
        ...prevState,
        [name]: value
        }));
    };

    const [data, setData] = useState([]);
    ...
    /* get data */
    ...

    const categories = data.map((item) => ({ value: item.id, label: item.Name }));

    return (
        <div className="app">
            <Form noValidate validated={validated}>
                <Form.Row>
                    <Form.Group as={Col} md="4" controlId="validationCustom01">
                        <Form.Label>Name</Form.Label>
                        <Form.Control
                            required
                            name="name"
                            type="text"
                            placeholder="Name"
                            onChange={handleChange}
                        />
                        <Form.Control.Feedback type="invalid">Check!</Form.Control.Feedback>
                        <Form.Control.Feedback>Ok!</Form.Control.Feedback>
                    </Form.Group>
                    <Form.Group as={Col} md="4" controlId="validationCustom02">
                        <Form.Label>Category</Form.Label>
                        <Form.Control
                            required
                            name="category"
                            as="select"
                            placeholder="Category"
                            onChange={handleChange}
                        >
                        <Select
                                options={categories}
                                defaultValue={true}
                                onChange={handleChange}
                                name="category"
                                id="search-select"
                            />
                        </Form.Control>
                        <Form.Control.Feedback type="invalid">Check!</Form.Control.Feedback>
                        <Form.Control.Feedback>Ok!</Form.Control.Feedback>
                    </Form.Group>
                </Form.Row>
            </Form>
        </div>
    );
}
        
export default App;

我希望能够将react-selectreact-bootstrap 一起使用,如上所示。 我需要Select 组件来适应代码,以便我可以使用react-bootstrap 验证并选择/输入所有数据以便能够插入它,我需要通过如下方式,例如:

console.log(select);

{name: "", category: ""}
name: "Name"
category: "Category"
__proto__: Object

我该怎么做?我需要它,否则我必须使用

<Form.Control
    required
    name="category"
    as="select"
    placeholder="Category"
    onChange={handleChange}
>
<option hidden value="" selected>Select</option>
    {
        categories.map(elem => {
            return <option  ... >Name</option>
        })
    }
</Form.Control>

并且选择仍然没有样式。

谢谢!

【问题讨论】:

  • 说实话,并不完全清楚你想要完成什么。如果您可以将代码放入沙盒中,然后指向您想要添加/修复的特定行为,那就太棒了。
  • 感谢您的回答,我在那里做到了:codesandbox.io/s/elegant-fast-jz5ng?file=/src/App.js
  • 我需要的是 Select 与 Form.Control 兼容,以便它呈现并能够在同一对象中获取选定的数据。
  • 沙盒当前已损坏。这是您无法解决的问题还是您打算解决它?
  • 是我修复的:&lt;Form.Control required name="category" as="select" placeholder="Category" onChange={handleChange} &gt; &lt;option hidden value="" selected&gt; Select &lt;/option&gt; {categories.map((elem) =&gt; { return &lt;option&gt;Name&lt;/option&gt;; })} &lt;/Form.Control&gt;

标签: javascript reactjs styles react-bootstrap react-select


【解决方案1】:

我假设您只是想在您的应用程序中使用 react-select。这应该很简单。我为您创建了一个使用 react-select 的专用元素:

const SelectBox = ({ options }) => {
  const [optionSelected, setSelectedOptions] = useState([]);

  const handleChange = (selected) => {
    setSelectedOptions(selected);
  };

  return (
    <Select
      options={options}
      isLoading={!options}
      closeMenuOnSelect={true}
      onChange={handleChange}
      value={optionSelected}
      name={"your_select_name"}
    />
  );
};

你可以像这样渲染它:

...
<SelectBox options={categories} />
...

沙盒:https://codesandbox.io/s/upbeat-torvalds-kzcug?file=/src/App.js

【讨论】:

  • 谢谢!这条路就是路!!我们只需要解决handleChange = e =&gt; {...};Select 的值。有什么建议吗?
  • @bonnegnu 当然。查看沙盒链接,我已经更新了。
  • 我需要你这样展示它{name: "Name", category: "A"} 建议?谢谢!
  • @bonnegnu 立即尝试
  • 您已经非常接近了!我们要带的是value: {name: "value input Name", category: "value select select1"} 建议?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2017-07-15
相关资源
最近更新 更多