【问题标题】:Show first selected item in the react bootstrap dropdown button在反应引导下拉按钮中显示第一个选定的项目
【发布时间】:2021-10-10 03:52:51
【问题描述】:

我想在页面呈现时显示带有选择的第一个项目的下拉菜单。 取而代之的是,我可以看到下拉列表的标题。如何显示列表中的第一项。

数组列表加载需要时间,有什么方法可以等待,当值可用并显示它?

  const [selectedElement, setSelectedElement] = useState(
    list.length != 0 ? list[0].name : ''
  );

  const handleSelect = e => {
    setSelectedElement(e);
    console.log('cdets--' + cdetsValue);
  };

        <DropdownButton
          id="dropdown-basic-button"
          variant="info"
          className="floatRight"
          onSelect={handleSelect}
          title={selectedElement}
        >
          {list.map((value, i) => {
            return (
              <Dropdown.Item key={i} eventKey={value.name}>
                {value.name}
              </Dropdown.Item>
            );
          })}
        </DropdownButton>

【问题讨论】:

    标签: reactjs bootstrap-4 dropdown react-bootstrap


    【解决方案1】:

    实际上,您正在使用下拉菜单作为选择。你可以使用 select 来达到这个目的,但是当你要求下拉时,我附上了下面的代码。

    import { useState } from "react";
    import { DropdownButton, Dropdown } from "react-bootstrap";
    import "./styles.css";
    
    const list = [
      { key: "Yellow", value: "yellow" },
      { key: "Blue", value: "blue" },
      { key: "Green", value: "green" }
    ];
    
    export default function App() {
      const [selected, setSelected] = useState({});
      const handleSelect = (key, event) => {
        setSelected({ key, value: event.target.value });
      };
    
      return (
        <div className="App">
          <h1>Hello CodeSandbox</h1>
          <DropdownButton
            id="dropdown-basic-button"
            variant="info"
            className="floatRight"
            onSelect={handleSelect}
            title={selected?.key || list[0].key}
          >
            {list.map((item, index) => {
              return (
                <Dropdown.Item key={index} eventKey={item.key}>
                  {item.value}
                </Dropdown.Item>
              );
            })}
          </DropdownButton>
          <h2>Start editing to see some magic happen!</h2>
        </div>
      );
    }
    

    【讨论】:

    • 我想这会起作用,只是一个小问题是我的列表需要一些时间来加载,所以当页面加载时它是空的。有什么办法可以等到变量有一些值?
    • 因为它是 react 的默认行为,您可以隐藏元素直到列表加载,只需检查 selected 是否具有某些值或 list 是否为空。您也可以在下拉按钮标题中显示 Loading...
    【解决方案2】:

    您可以像这样将活动道具传递给 Dropdown.Item :

       <DropdownButton
          id="dropdown-basic-button"
          variant="info"
          className="floatRight"
          onSelect={handleSelect}
          title="Select list"
        >
          {list.map((value, i) => {
            return (
              <Dropdown.Item active={i === 0 ? true : false} key={i} eventKey={value.name}>
                {value.name}
              </Dropdown.Item>
            );
          })}
        </DropdownButton>
    

    条件基本上是如果项目索引为0,即第一个项目,那么它将处于活动状态并被选中。

    【讨论】:

    • 它没有用。事实上,列表中的选定项目也不会显示在下拉标题中。我想将列表中的第一项显示为下拉标题。
    • @XXDebugger 我需要看看你要映射的列表数组在哪里以及是什么。
    • 我的列表数组有 3 个项目,如果有标题,那么下拉菜单上的文本不会改变。
    • @XXDebugger 您需要问另一个问题,为什么标题然后下拉菜单上的文本不会更改并提供更多代码,以便我可以帮助您。如果它对你有帮助,请接受这个答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2015-12-01
    • 1970-01-01
    • 2017-03-25
    • 2018-06-06
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多