如何在 reactstrap 下拉菜单中设置所选项目?

Posted

技术标签:

【中文标题】如何在 reactstrap 下拉菜单中设置所选项目?【英文标题】:How to set selected item in reactstrap Dropdown? 【发布时间】:2017-11-05 23:09:28 【问题描述】:

如何在 reactstrap 下拉菜单中设置选中项?

有下拉示例:https://reactstrap.github.io/components/dropdowns/

当我在下拉列表中选择项目时,它不显示。

************************工作解决方案************************** ***

import React from "react";
import ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle from "reactstrap";
import superagent from "superagent";

class BootstrapSelect extends React.Component 

    constructor(props) 
        super(props);

        this.toggle = this.toggle.bind(this);
        this.changeValue = this.changeValue.bind(this);
        this.state = 
            actions: [],
            dropDownValue: 'Select action',
            dropdownOpen: false
        ;
    

    toggle(event) 

        this.setState(
            dropdownOpen: !this.state.dropdownOpen
        );
    

    changeValue(e) 
        this.setState(dropDownValue: e.currentTarget.textContent);
        let id = e.currentTarget.getAttribute("id");
        console.log(id);
    


    componentDidMount() 
        superagent
            .get('/getActions')
            .type('application/json; charset=utf-8')
            .end(function (err, res) 
                console.log(res.body);
                this.setState(actions: res.body);
            .bind(this));

    

    render() 
        return (
            <ButtonDropdown isOpen=this.state.dropdownOpen toggle=this.toggle>
                <DropdownToggle caret>
                    this.state.dropDownValue
                </DropdownToggle>
                <DropdownMenu>
                    this.state.actions.map(e => 
                        return <DropdownItem id=e.id key=e.id onClick=this.changeValue>e.name</DropdownItem>
                    )
                </DropdownMenu>

            </ButtonDropdown>
        );
    



export default BootstrapSelect;

【问题讨论】:

【参考方案1】:

在您的 DropDownItem 上添加一个 onclick(在 div 内?)以更改您的状态。从您的点击事件中设置一个“dropDownValue”。 在您的 dropDownToggle 中,获取您的 state.dropDownValue。

类似这样的:

changeValue(e) 
  this.setState(dropDownValue: e.currentTarget.textContent)


<DropdownToggle caret>
    this.state.dropDownValue
</DropdownToggle>
<DropdownItem>
    <div onClick=this.changeValue>Another Action</div>
</DropdownItem>

当然,不要忘记初始化它并绑定函数以使您的 this 工作。

【讨论】:

我将 id 添加到 DropdownItem 以获取所选菜单项的 id。【参考方案2】:

类似于@Nevosis 解决方案,您可以添加一个值属性,然后在“onChange”事件中获取它:

    onDropdownItem_Click = (sender) => 
    var icon = sender.currentTarget.querySelector("i");
    var newState = 
      dropDownValue: sender.currentTarget.getAttribute("dropdownvalue"),
      dropDownIcon: !!icon && icon.getAttribute("class")
    ;

    this.setState(newState);
    if (!!this.props.onChange) 
      this.props.onChange(newState.dropDownValue);
        


  render = () => (
    <Dropdown isOpen=this.state.dropDownOpen toggle=this.toggle className='ticket-module-selector ' + this.props.className>
      <DropdownToggle color=this.props.color caret>
        <i className=this.state.dropDownIcon></i>this.state.dropDownValue
      </DropdownToggle>
      <DropdownMenu>
        <DropdownItem onClick=this.onDropdownItem_Click dropDownValue="Allotments"><i className="fa fa-plane fa-fw"></i>Allotments</DropdownItem>
        <DropdownItem onClick=this.onDropdownItem_Click dropDownValue="GeoAMS"><i className="fa fa-envelope fa-fw"></i>GeoAMS</DropdownItem>
        <DropdownItem onClick=this.onDropdownItem_Click dropDownValue="QIS"><i className="fa fa-money fa-fw"></i>BSP</DropdownItem>
        <DropdownItem onClick=this.onDropdownItem_Click dropDownValue="QIS"><i className="fa fa-clock-o fa-fw"></i>QIS</DropdownItem>
        <DropdownItem onClick=this.onDropdownItem_Click dropDownValue="NO_SHOW"><i className="fa fa-car fa-fw"></i>NO SHOW</DropdownItem>
      </DropdownMenu>
    </Dropdown>

【讨论】:

此方法将 onClick 分配给 Dropdown 组件在 html 中创建的按钮,因此支持键盘导航。我认为这是正确的解决方案。 我在这里试过这个。没用:***.com/questions/60435037/…【参考方案3】:

这是一个完整的工作代码示例,可能会对您有所帮助。 使用导入:

import  ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle, Dropdown  from "reactstrap"

方法:

state = 
   currency: '',
   dropDownOpen: '',


toggle = () => 
    this.setState(
       dropDownOpen: !this.state.dropDownOpen,
    )


handleChange = (code) => 
    this.setState(
        currency: code
    )

里面

render()
return(
    <ButtonDropdown >
        <Dropdown isOpen=this.state.dropDownOpen toggle=this.toggle >
            <DropdownToggle color="primary" caret className="dropdown-toggle">
                Select Currency
            </DropdownToggle>
            <DropdownMenu className="currency-dropdown">
                    <DropdownItem onClick=() => this.handleChange(USD) dropDownValue="USD">USD</DropdownItem>
                    <DropdownItem onClick=() => this.handleChange(EUR) dropDownValue="EUR">EUR</DropdownItem>
                    <DropdownItem onClick=() => this.handleChange(INR) dropDownValue="INR">INR</DropdownItem>
                    <DropdownItem onClick=() => this.handleChange(AFT) dropDownValue="AFT">AFT</DropdownItem>
                </DropdownMenu>
            </Dropdown>
        </ButtonDropdown>
)

您可以更新 CSS:

.dropdown-toggle 
    margin-top: 36px;
    min-width: 300px;
    background-color: white;
    color: darkslategrey;


.currency-dropdown 
    max-height: 350px;
    overflow-y: scroll;
    min-width: 300px;


当您使用this.state.currency 时,您将获得选定的值

【讨论】:

以上是关于如何在 reactstrap 下拉菜单中设置所选项目?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS Reactstrap 输入下拉菜单未显示所选值

如何在 Select 元素中设置所选项目的背景颜色?

如何在 reactJS 中自定义 reactstrap 下拉菜单

Reactstrap 下拉菜单打开倍数菜单

正在反应 jsx 中运行 reactstrap 下拉菜单

Reactstrap 鼠标悬停时自动下拉菜单