如何在 ReactJS 中使用特定值制作下拉菜单?

Posted

技术标签:

【中文标题】如何在 ReactJS 中使用特定值制作下拉菜单?【英文标题】:How to make a Dropdown with specific values in ReactJS? 【发布时间】:2018-12-11 13:01:09 【问题描述】:

我正在使用PrimeReactDropdown

我有这个代码,但在Dropdown 中我只能显示label 而不是name

如何在Dropdown菜单中显示optionsSearch变量的每个元素的名称来选择这些名称?

import React, Component from 'react';
import Dropdown from 'primereact/components/dropdown/Dropdown';

class OptionsExample extends Component 
  constructor(props) 
    super(props);
    this.state = 
      optionsSearch: 'FORM_FIELDS'
    ;
  

  onOptionChange = e => 
    this.setState(optionsSearch: e.value);
  

  render() 
    const optionsSearch = [
      key: 'NAME1', name: 'NAME1', label: 'DESCRIPTION1',
      key: 'NAME2', name: 'NAME2', label: 'DESCRIPTION2',
      key: 'NAME3', name: 'NAME3', label: 'DESCRIPTION3'
    ];

    return (
      <div>
        <div className='ui-g-12 ui-md-12 ui-lg-12'>
          <Dropdown value=this.state.optionsSearch options=optionsSearch onChange=this.onOptionChange style=width: '180px' placeholder=`$this.state.optionsSearch` />
        </div>
      </div>
    );
  


export default OptionsExample;

【问题讨论】:

optionLabel="name" 添加到您的&lt;Dropdown&gt; 正是我需要它!非常感谢!! 【参考方案1】:

此代码是从 PrimeReact 源代码复制的下拉菜单..

https://github.com/primefaces/primereact/blob/master/src/components/dropdown/DropdownItem.js

render() 
    let className = classNames('ui-dropdown-item ui-corner-all', 
        'ui-state-highlight': this.props.selected,
        'ui-dropdown-item-empty': (!this.props.label || this.props.label.length === 0)
    );
    let content = this.props.template ? this.props.template(this.props.option) : this.props.label;

    return (
        <li className=className onClick=this.onClick>
            content
        </li>
    );

如您所见,content 正在为每个下拉项呈现,其中仅包含“标签”。

let content = this.props.template ? this.props.template(this.props.option) : this.props.label;

因此,如果要显示“名称”,则必须将其放入标签中。

他们的演示也只使用了“label”和“value”属性。

https://www.primefaces.org/primereact/#/dropdown

编辑归功于@Chris G

您也可以呈现自定义内容,但您必须将模板函数传递给下拉列表。

他们的演示展示了这一点。

carTemplate(option) 
    if(!option.value) 
        return option.label;
    
    else 
        var logoPath = 'showcase/resources/demo/images/car/' + option.label + '.png';

        return (
            <div className="ui-helper-clearfix">
                <img alt=option.label src=logoPath style=display:'inline-block',margin:'5px 0 0 5px' />
                <span style=float:'right',margin:'.5em .25em 0 0'>option.label</span>
            </div>
        );
    

然后他们将其传递给 Dropdown 组件。

<Dropdown value=this.state.car options=cars onChange=this.onCarChange itemTemplate=this.carTemplate style=width:'150px' placeholder="Select a Car"/>

【讨论】:

第二个演示使用name: 'New York', code: 'NY' 格式,如果name 按要求声明为optionLabel,则效果非常好。 哦,对了,很好。看起来该库需要一些模板才能呈现自定义内容。 非常感谢您的帮助。我知道这个演示primefaces.org/primereact/#/dropdown,但我无法让它工作。我只需要在 中添加 optionLabel="name" @christopher_pk 如何添加键属性以避免错误 - 遇到两个具有相同键的孩子。密钥应该是唯一的,以便组件在更新过程中保持其身份。 ***.com/questions/64771089/…

以上是关于如何在 ReactJS 中使用特定值制作下拉菜单?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何在 ReactJS 中更改单选按钮时重置选定的下拉列表

如何在 Reactjs 中显示子菜单?

如何根据另一个下拉菜单值禁用下拉菜单

ReactJS:如何从输入字段的下拉列表中显示选定的值?