列表框

列表框用于从项目列表中选择一个或多个值。


import { ListBox } from 'primereact/listbox';
         

列表框用作受控组件,具有valueonChange属性以及options集合。选项的标签和值分别使用optionLabeloptionValue定义。属性分别定义。optionLabel的默认属性名称为labeloptionValue的默认属性名称为value。如果省略optionValue并且该对象没有value属性,则该对象本身将成为选项的值。请注意,当选项是简单的原始值(例如字符串数组)时,不需要optionLabeloptionValue

  • 纽约
  • 罗马
  • 伦敦
  • 伊斯坦布尔
  • 巴黎

<ListBox value={selectedCity} onChange={(e) => setSelectedCity(e.value)} options={cities} optionLabel="name" className="w-full md:w-14rem" />
         

默认情况下,列表框允许选择单个项目,启用multiple属性可以选择多个项目。当存在可选的metaKeySelection时,行为会更改为选择新项目需要按下 meta 键。

  • 纽约
  • 罗马
  • 伦敦
  • 伊斯坦布尔
  • 巴黎

<ListBox multiple value={selectedCities} onChange={(e) => setSelectedCities(e.value)} options={cities} optionLabel="name" className="w-full md:w-14rem" />
         

当提供嵌套数据结构时,可以对选项进行分组。要定义组的标签,需要optionGroupLabel属性,还需要optionGroupChildren来定义引用组子项的属性。

  • 德国
  • 柏林
  • 法兰克福
  • 汉堡
  • 慕尼黑
  • 美国
  • 芝加哥
  • 洛杉矶
  • 纽约
  • 旧金山
  • 日本
  • 京都
  • 大阪
  • 东京
  • 横滨

<ListBox value={selectedCity} onChange={(e) => setSelectedCity(e.value)} options={groupedCities} optionLabel="label" 
    optionGroupLabel="label" optionGroupChildren="items" optionGroupTemplate={groupTemplate} className="w-full md:w-14rem" listStyle={{ maxHeight: '250px' }} />
         

列表框提供了内置筛选功能,可以通过添加filter属性启用。

  • 纽约
  • 罗马
  • 伦敦
  • 伊斯坦布尔
  • 巴黎

<ListBox filter value={selectedCity} onChange={(e) => setSelectedCity(e.value)} options={cities} optionLabel="name" className="w-full md:w-14rem" />
         

选项的自定义内容使用itemTemplate属性显示,该属性将选项作为参数。其他可用的模板部分是filterTemplateoptionGroupTemplate

  • Australia
    澳大利亚
  • Brazil
    巴西
  • China
    中国
  • Egypt
    埃及
  • France
    法国
  • Germany
    德国
  • India
    印度
  • Japan
    日本
  • Spain
    西班牙
  • United States
    美国

<ListBox value={selectedCountry} onChange={(e) => setSelectedCountry(e.value)} options={countries} optionLabel="name" 
    itemTemplate={countryTemplate} className="w-full md:w-14rem" listStyle={{ maxHeight: '250px' }} />
         

虚拟滚动器用于高效渲染长列表选项,例如此演示中的 10 万条记录。配置通过virtualScrollerOptions属性完成,请参阅 虚拟滚动器,了解有关可用选项的更多信息,因为它在内部被列表框使用。

    
    <ListBox value={selectedItem} onChange={(e) => setSelectedItem(e.value)} options={items} 
        virtualScrollerOptions={{ itemSize: 38 }} className="w-full md:w-14rem" listStyle={{ height: '250px' }} />
             

    使用invalid属性显示无效状态,以指示验证失败。您可以在与表单验证库集成时使用此样式。

    • 纽约
    • 罗马
    • 伦敦
    • 伊斯坦布尔
    • 巴黎
    
    <ListBox invalid value={selectedCity} onChange={(e) => setSelectedCity(e.value)} options={cities} optionLabel="name" 
        className="w-full md:w-14rem" />
             

    当存在disabled时,无法编辑和聚焦该元素。

    • 纽约
    • 罗马
    • 伦敦
    • 伊斯坦布尔
    • 巴黎
    
    <ListBox disabled options={cities} optionLabel="name" className="w-full md:w-14rem" />
             

    屏幕阅读器

    可以使用 aria-labelledbyaria-label 属性提供描述组件的值。列表元素具有listbox角色,并且当启用多选时,aria-multiselectable属性设置为 true。每个列表项都有一个option角色,其属性为aria-selectedaria-disabled

    如果启用了筛选,则可以定义 filterInputProps 以向输入元素提供 aria-* 属性。或者,屏幕阅读器通常也会使用 filterPlaceholder

    
    <span id="lb">Options</span>
    <ListBox aria-labelledby="lb" />
    
    <ListBox aria-label="City" />
         

    键盘支持

    按键功能
    tab将焦点移动到第一个选定的选项,如果没有,则第一个选项接收焦点。
    向上箭头将焦点移动到上一个选项。
    向下箭头将焦点移动到下一个选项。
    回车键切换焦点选项的选定状态。
    空格键切换焦点选项的选定状态。
    Home将焦点移动到第一个选项。
    End将焦点移动到最后一个选项。
    shift + 向下箭头将焦点移动到下一个选项并切换选择状态。
    shift + 向上箭头将焦点移动到上一个选项并切换选择状态。
    shift + 空格键选择最近选定的选项和焦点选项之间的项目。
    control + shift + Home选择焦点选项和直到第一个选项的所有选项。
    control + shift + End选择焦点选项和直到最后一个选项的所有选项。
    control + a选择所有选项。