FormTokenField 是一个类似于临时编辑器界面中的标签和分类字段,或 OS X Mail 应用中的“收件人”字段的字段。可以通过键入或从建议令牌列表中选择来输入令牌。
最多会显示一百个与用户当前输入内容匹配的建议供用户选择(自动补全)。令牌以“,”字符分隔。可以使用上箭头或下箭头选择建议,并通过 Tab 键或 Enter 键添加。
value 属性的处理方式类似于受控表单组件。有关更多信息,请参阅 React 文档中的 Forms。
键盘无障碍性
left arrow– 如果输入字段为空,将插入点移至前一个令牌之前right arrow– 如果输入字段为空,将插入点移至后一个令牌之后up arrow– 选择上一个建议down arrow– 选择下一个建议tab/enter– 如果已选择建议,则将该建议作为新令牌插入;否则,将输入到输入框中的值作为新令牌插入comma– 将输入到输入框中的值作为新令牌插入
属性
value– 要显示为字段中令牌的字符串或对象数组。如果数组中包含对象,它们必须具有value属性。以下是可以作为 value 传入的对象示例:
{
value: '(string) The value of the token.',
status: "(string) One of 'error', 'validating', or 'success'. Applies styles to token."
title: '(string) If not falsey, will add a title to the token.',
onMouserEnter: '(function) Function to call when onMouseEnter event triggered on token.'
onMouseLeave: '(function) Function to call when onMouseLeave is triggered on token.'
}
displayTransform– 用于转换令牌以供显示的函数。(在编辑器中,这是为了解码嵌入在标签中的 HTML 实体——否则,如标签名称中的&会被双重编码为&,一次由 REST API 处理,另一次由 React 处理)。saveTransform– 用于转换令牌以供保存的函数。默认情况下会修剪令牌值。此函数也在将建议与当前值进行匹配时应用,以便正确处理前导或尾随空格。(在编辑器中,这是为了去除标签名称的前导和尾随空格,就像 wp-admin 所做的那样。否则 REST API 不会保存它们。)onChange– 当令牌发生变化时调用的函数。新的令牌数组会传递给回调函数。onInputChange– 当用户在输入字段中键入内容时调用的函数。可用于触发自动补全请求。onFocus– 当 TokenField 获得焦点时调用的函数。事件会传递给回调函数。对分析很有用。suggestions– 呈现给用户的建议令牌字符串数组。maxSuggestions– 同时显示的最大建议数量。tokenizeOnSpace– 如果为 true,当TokenField获得焦点且按下space键时,将添加令牌。isBorderless– 当为 true 时,渲染不带背景的令牌。maxLength– 如果传递了该参数,当令牌数量大于或等于maxLength时,TokenField将禁用添加新令牌的能力。disabled– 当为 true 时,无法添加或删除令牌。placeholder– 如果传递了该参数,当没有值令牌存在时,TokenField输入框将显示占位符字符串。help– 控件的附加说明。仅用于控件的有意义描述或说明。包含描述的元素将通过aria-describedby程序化地关联到FormTokenField。默认为操作指南消息(例如:用逗号或 Enter 键分隔。);传递空字符串可隐藏它。messages– 允许自定义屏幕阅读器在不同场合下呈现的消息:added– 用户添加了新令牌。removed– 用户移除了现有令牌。remove– 用户聚焦于移除令牌的按钮。__experimentalInvalid– 用户尝试添加未通过验证的令牌。
__experimentalRenderItem– 为建议列表中的每个选项调用的自定义渲染器。渲染 prop 接收一个对象作为其参数,该对象在item键下包含单个选项的数据(直接来自传递给optionsprop 的数据数组)。__experimentalExpandOnFocus– 如果为 true,当输入字段获得焦点时,建议列表将始终展开。__experimentalShowHowTo– 已弃用。请使用helpprop 代替。helpprop 现在默认为之前的操作指南文本;如果您之前传递__experimentalShowHowTo={ false }来隐藏它,请改为向help传递空字符串。__experimentalValidateInput– 如果传递了该参数,所有输入的值的将在作为令牌添加之前进行验证。__experimentalAutoSelectFirstMatch– 如果为 true,当用户按下 Enter 键时(或当 tokenizeOnSpace 为 true 时按下空格键),选择第一个匹配的建议。tokenizeOnBlur– 如果为 true,当字段失去焦点时,将任何 incompleteTokenValue 作为新令牌添加。
用法
import { useState } from 'react';
import { FormTokenField } from '@wordpress/components';
const continents = [
'Africa',
'America',
'Antarctica',
'Asia',
'Europe',
'Oceania',
];
const MyFormTokenField = () => {
const [ selectedContinents, setSelectedContinents ] = useState( [] );
return (
<FormTokenField
value={ selectedContinents }
suggestions={ continents }
onChange={ ( tokens ) => setSelectedContinents( tokens ) }
/>
);
};