如何在 ReactJS 中添加标签输入框?
我们可以通过为输入字段创建一个新的组件并在 NextJS 中使用 onChange 事件处理输入的标签来添加标签输入框。我们还可以使用状态来存储标签并在输入时显示它们。最后,我们可以添加一个按钮或函数来提交最终的标签列表。让我们首先了解什么是 ReactJS 和标签输入框。
ReactJS
React 是一个用于构建用户界面的 JavaScript 库。它使创建交互式 UI 变得容易。为应用程序中的每个状态设计简单的视图,当您的数据发生变化时,React 将有效地更新和渲染正确的组件。您还可以构建封装组件来管理它们自己的状态,然后将它们组合起来以创建复杂的 UI。
ReactJS 可以创建小型和大型、复杂的应用程序。它提供了一组基本但可靠的功能来启动 Web 应用程序。它易于掌握现代和遗留应用程序,并且是更快地编写功能的方法。React 提供了大量现成的组件。
标签输入框
标签输入框是一个 UI 元素,允许用户在输入字段中添加标签或关键词。这些标签通常用于对相关项目进行分类或分组,并且可用于搜索或过滤目的。
标签输入框通常具有一个输入字段,用户可以在其中键入标签,以及一个按钮将标签添加到列表中。然后可以将标签显示为单个元素,通常带有关闭按钮以允许用户删除标签。某些标签输入框还具有自动完成功能,以便在用户键入时建议现有标签。
首先创建一个新的 NextJS 应用程序,并在我们的开发服务器上运行它,如下所示:
npx create-react-app tag-app cd tag-app npm start
方法
通过在终端中运行以下命令来安装 react-tag-input 库:
npm install react-tag-input
通过在文件顶部添加以下行,将库导入到您的组件文件中:
import { TagInput } from 'react-tag-input';
创建一个状态变量来保存标签,并将其初始化为空数组:
const [tags, setTags] = useState([]);
将 TagInput 组件添加到您的 JSX 代码中,并传入标签状态变量和一个用于处理标签更改的回调函数:
<TagInput tags={tags} onChange={(newTags) => setTags(newTags)} />
(可选)您还可以通过传入其他 props(如占位符和样式)来自定义 TagInput 组件。例如,要更改输入字段的占位符文本,您可以添加以下 prop:
<TagInput tags={tags} onChange={(newTags) => setTags(newTags)} placeholder="Enter tags here" />
根据需要在您的组件逻辑中使用标签状态变量。例如,您可以在列表中显示标签或将它们用作 API 调用的输入:
<ul>
{tags.map((tag) => <li key={tag}>{tag}</li>)}
</ul>
就是这样!您现在在 ReactJS 项目中拥有了一个功能性的标签输入框。
示例
import React, { useState } from 'react';
import { render } from 'react-dom';
import { COUNTRIES } from './countries';
import './style.css';
import { WithContext as ReactTags } from 'react-tag-input';
const suggestions = COUNTRIES.map((country) => {
return {
id: country,
text: country,
};
});
const KeyCodes = {
comma: 188,
enter: 13,
};
const delimiters = [KeyCodes.comma, KeyCodes.enter];
const App = () => {
const [tags, setTags] = React.useState([
{ id: 'Thailand', text: 'Thailand' },
{ id: 'India', text: 'India' },
{ id: 'Vietnam', text: 'Vietnam' },
{ id: 'Turkey', text: 'Turkey' },
]);
const handleDelete = (i) => {
setTags(tags.filter((tag, index) => index !== i));
};
const handleAddition = (tag) => {
setTags([...tags, tag]);
};
const handleDrag = (tag, currPos, newPos) => {
const newTags = tags.slice();
newTags.splice(currPos, 1);
newTags.splice(newPos, 0, tag);
// re-render
setTags(newTags);
};
const handleTagClick = (index) => {
console.log('The tag at index ' + index + ' was clicked');
};
return (
<div className="app">
<h1> React Tags Example </h1>
<div>
<ReactTags
tags={tags}
suggestions={suggestions}
delimiters={delimiters}
handleDelete={handleDelete}
handleAddition={handleAddition}
handleDrag={handleDrag}
handleTagClick={handleTagClick}
inputFieldPosition="bottom"
autocomplete
editable
/>
</div>
</div>
);
};
render(<App />, document.getElementById('root'));
输出
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP