React Autocomplete示例教程是今天的主题。在现代Web开发中,使用React改善用户体验是很容易。自动完成的概念很简单。它是基于用户输入的建议列表。然后,用户可以按Enter键以完成短语。它节省了用户的时间,这使用户非常满意。自动填充可以通过多种方式实现,如何过滤并呈现给用户,在本文中,我们将使用传递给我们组件的固定推荐列表。在用户输入时,我们将过滤结果,并仅在建议中的任何位置显示包含用户输入的字段。

如果您想了解有关React.js的更多信息,请查看此React 16 - 完整指南(包括React Router 4和Redux)指南。它有一个关于React和Redux的简短介绍。React 16 - 完整指南(包括React Router 4和Redux)

React Autocomplete示例教程
我们在本教程中使用名为 [react-autocomplete]的库(https://github.com/reactjs/re...。但首先,让我们使用以下命令安装 React.js 命令。

1:安装 React.js.

键入以下命令。

npx create-react-app my-app
cd my-app
npm start

现在,使用以下命令安装 react-autocomplete 库。

npm install --save react-autocomplete

2: 创建静态数据。

在 src 文件夹中,创建一个名为 data.js 的文件,并添加以下返回静态数据的函数。

// data.js

export function getStocks() {
return [
{ abbr: 'ADANIPORTS', name: 'Adani Ports & Special Economic Zone Ltd.' },
{ abbr: 'ASIANPAINT', name: 'Asian Paints Ltd.' },
{ abbr: 'AXISBANK', name: 'Axis Bank Ltd.' },
{ abbr: 'BAJAJ-AUTO', name: 'Bajaj Auto Ltd.' },
{ abbr: 'BAJFINANCE', name: 'Bajaj Finance' },
{ abbr: 'BAJAJFINSV', name: 'Bajaj Finserv Ltd.' },
{ abbr: 'BPCL', name: 'Bharat Petroleum Corporation Ltd.' },
{ abbr: 'BHARTIARTL', name: 'Bharti Airtel Ltd.' },
{ abbr: 'INFRATEL', name: 'Bharti Infratel' },
{ abbr: 'CIPLA', name: 'Cipla Ltd.' },
{ abbr: 'COALINDIA', name: 'Coal India Ltd' },
{ abbr: 'DRREDDY', name: 'Dr. Reddys Laboratories Ltd.' },
{ abbr: 'EICHERMOT', name: 'Eicher Motors Ltd.' },
{ abbr: 'GAIL', name: 'GAIL (India) Ltd.' },
{ abbr: 'GRASIM', name: 'Grasim Industries Ltd.' },
{ abbr: 'HCLTECH', name: 'HCL Technologies Ltd.' },
{ abbr: 'HDFCBANK', name: 'HDFC Bank Ltd.' },
{ abbr: 'HEROMOTOCO', name: 'Hero MotoCorp Ltd.' },
{ abbr: 'HINDALCO', name: 'Hindalco Industries Ltd.' },
{ abbr: 'HINDPETRO', name: 'Hindustan Petroleum Corporation Ltd.' },
{ abbr: 'HINDUNILVR', name: 'Hindustan Unilever Ltd.' },
{ abbr: 'HDFC', name: 'Housing Development Finance Corporation Ltd.' },
{ abbr: 'ITC', name: 'I T C Ltd.' },
{ abbr: 'ICICIBANK', name: 'ICICI Bank Ltd.' },
{ abbr: 'IBULHSGFIN', name: 'Indiabulls Housing Finance' },
{ abbr: 'IOC', name: 'Indian Oil Corporation Ltd.' },
{ abbr: 'INDUSINDBK', name: 'IndusInd Bank Ltd.' },
{ abbr: 'INFY ', name: 'Infosys Ltd.' },
{ abbr: 'KOTAKBANK', name: 'Kotak Mahindra Bank Ltd.' },
{ abbr: 'LT', name: 'Larsen & Toubro Ltd.' },
{ abbr: 'LUPIN', name: 'Lupin Ltd.' },
{ abbr: 'M&M', name: 'Mahindra & Mahindra Ltd.' },
{ abbr: 'MARUTI', name: 'Maruti Suzuki India Ltd.' },
{ abbr: 'NTPC', name: 'NTPC Ltd.' },
{ abbr: 'ONGC', name: 'Oil & Natural Gas Corporation Ltd.' },
{ abbr: 'POWERGRID', name: 'Power Grid Corporation of India Ltd.' },
{ abbr: 'RELIANCE', name: 'Reliance Industries Ltd.' },
{ abbr: 'SBIN', name: 'State Bank of India' },
{ abbr: 'SUNPHARMA', name: 'Sun Pharmaceutical Industries Ltd.' },
{ abbr: 'TCS', name: 'Tata Consultancy Services Ltd.' },
{ abbr: 'TATAMOTORS', name: 'Tata Motors Ltd.' },
{ abbr: 'TATASTEEL', name: 'Tata Steel Ltd.' },
{ abbr: 'TECHM', name: 'Tech Mahindra Ltd.' },
{ abbr: 'TITAN', name: 'Titan Company Ltd.' },
{ abbr: 'ULTRACEMCO', name: 'UltraTech Cement Ltd.' },
{ abbr: 'UPL', name: 'UPL Ltd.' },
{ abbr: 'VEDL', name: 'Vedanta Ltd' },
{ abbr: 'WIPRO', name: 'Wipro Ltd.' },
{ abbr: 'YESBANK', name: 'Yes Bank Ltd.' },
{ abbr: 'ZEEL', name: 'Zee Entertainment Enterprises Ltd.' }
];
}

此功能将返回前50名股票名称及其印度股票市场的缩写。

另外,我们需要在这里再创建一个函数,那就是 matchStocks。

此功能允许我们过滤掉用户在输入区域中输入的股票。因此,当用户开始在文本框中键入时,它将与股票数组进行比较,如果找到匹配则返回并显示给用户。

所以编写第二个函数并从 data.js 文件中导出它。

// data.js

export function matchStocks(state, value) {
return (
state.name.toLowerCase().indexOf(value.toLowerCase()) !== -1 ||
state.abbr.toLowerCase().indexOf(value.toLowerCase()) !== -1
);
}

所以,现在基本上,我们在 App.js 文件中导入这些函数并将其传递给 Autocomplete 组件。

3: Autocomplete API

它具有以下属性。

  • value: 这是文本框的默认值,在我们的例子中,它将为空或“。
  • inputProps:这是一个对象。Props传递给 props.renderInput 。;默认情况下,除非您为 props.renderInput 指定了自定义值,否则这些道具将应用于由自动完成呈现的<input />元素。
  • wrapperStyle:它是一个对象,它具有以下的默认值。
{
display: 'inline-block'
}
  • items:这是一个数据数组,在 data.js 文件中定义。在我们的例子中,它是股票市场数据。
  • getItemValue:用于读取项中每个条目的显示值。
  • shouldItemRender:这是一个功能。为项目中的每个条目调用,其返回值用于确定是否应在下拉菜单中显示。通过de,fault总是呈现所有项目。
  • onChange:这是一个函数,每次用户更改输入值时都会调用它。
  • onSelect:此功能在用户从下拉菜单中选择项目时调用。
  • renderMenu:这是函数并被调用以生成drop-dn菜单的渲染树。确保返回的树包含项中的每个条目,否则突出显示的顺序和键盘导航逻辑将中断。样式将包含{top,left,minWidth},它们是左上角的坐标和下拉菜单的宽度。
  • renderItem:这是函数,并为项目中的每个条目调用,它还传递 shouldItemRender 以生成下拉菜单中每个项目的渲染树。样式是一组可选样式,可用于改善下拉菜单中项目的外观。

4:将自动填充组件添加到App.js文件中。

所以我们的最终 App.js 文件看起来像这样。

import React, { Component } from 'react';
import Autocomplete from 'react-autocomplete';
import { getStocks, matchStocks } from './data';
import './App.css';
class App extends Component { state = { value: '' };
render() {
return ( item.name }
shouldItemRender={ matchStocks }
onChange={(event, value) => this.setState({ value }) }
onSelect={ value => this.setState({ value }) }
renderMenu={ children => ( { children } )}
renderItem={ (item, isHighlighted) => ( { item.name } )}
/> );
}
} export default App;

在这里,我们使用了前面讨论过的所有属性。其中一些仍然没有,但你可以在Github上查看。

我们的 data.js 文件看起来像这样。

// data.js

export function getStocks() {
return [
{ abbr: 'ADANIPORTS', name: 'Adani Ports & Special Economic Zone Ltd.' },
{ abbr: 'ASIANPAINT', name: 'Asian Paints Ltd.' },
{ abbr: 'AXISBANK', name: 'Axis Bank Ltd.' },
{ abbr: 'BAJAJ-AUTO', name: 'Bajaj Auto Ltd.' },
{ abbr: 'BAJFINANCE', name: 'Bajaj Finance' },
{ abbr: 'BAJAJFINSV', name: 'Bajaj Finserv Ltd.' },
{ abbr: 'BPCL', name: 'Bharat Petroleum Corporation Ltd.' },
{ abbr: 'BHARTIARTL', name: 'Bharti Airtel Ltd.' },
{ abbr: 'INFRATEL', name: 'Bharti Infratel' },
{ abbr: 'CIPLA', name: 'Cipla Ltd.' },
{ abbr: 'COALINDIA', name: 'Coal India Ltd' },
{ abbr: 'DRREDDY', name: 'Dr. Reddys Laboratories Ltd.' },
{ abbr: 'EICHERMOT', name: 'Eicher Motors Ltd.' },
{ abbr: 'GAIL ', name: 'GAIL (India) Ltd.' },
{ abbr: 'GRASIM', name: 'Grasim Industries Ltd.' },
{ abbr: 'HCLTECH', name: 'HCL Technologies Ltd.' },
{ abbr: 'HDFCBANK', name: 'HDFC Bank Ltd.' },
{ abbr: 'HEROMOTOCO', name: 'Hero MotoCorp Ltd.' },
{ abbr: 'HINDALCO', name: 'Hindalco Industries Ltd.' },
{ abbr: 'HINDPETRO', name: 'Hindustan Petroleum Corporation Ltd.' },
{ abbr: 'HINDUNILVR', name: 'Hindustan Unilever Ltd.' },
{ abbr: 'HDFC', name: 'Housing Development Finance Corporation Ltd.' },
{ abbr: 'ITC', name: 'I T C Ltd.' },
{ abbr: 'ICICIBANK', name: 'ICICI Bank Ltd.' },
{ abbr: 'IBULHSGFIN', name: 'Indiabulls Housing Finance' },
{ abbr: 'IOC', name: 'Indian Oil Corporation Ltd.' },
{ abbr: 'INDUSINDBK', name: 'IndusInd Bank Ltd.' },
{ abbr: 'INFY ', name: 'Infosys Ltd.' },
{ abbr: 'KOTAKBANK', name: 'Kotak Mahindra Bank Ltd.' },
{ abbr: 'LT', name: 'Larsen & Toubro Ltd.' },
{ abbr: 'LUPIN', name: 'Lupin Ltd.' },
{ abbr: 'M&M', name: 'Mahindra & Mahindra Ltd.' },
{ abbr: 'MARUTI', name: 'Maruti Suzuki India Ltd.' },
{ abbr: 'NTPC', name: 'NTPC Ltd.' },
{ abbr: 'ONGC', name: 'Oil & Natural Gas Corporation Ltd.' },
{ abbr: 'POWERGRID', name: 'Power Grid Corporation of India Ltd.' },
{ abbr: 'RELIANCE', name: 'Reliance Industries Ltd.' },
{ abbr: 'SBIN', name: 'State Bank of India' },
{ abbr: 'SUNPHARMA', name: 'Sun Pharmaceutical Industries Ltd.' },
{ abbr: 'TCS', name: 'Tata Consultancy Services Ltd.' },
{ abbr: 'TATAMOTORS', name: 'Tata Motors Ltd.' },
{ abbr: 'TATASTEEL', name: 'Tata Steel Ltd.' },
{ abbr: 'TECHM', name: 'Tech Mahindra Ltd.' },
{ abbr: 'TITAN', name: 'Titan Company Ltd.' },
{ abbr: 'ULTRACEMCO', name: 'UltraTech Cement Ltd.' },
{ abbr: 'UPL', name: 'UPL Ltd.' },
{ abbr: 'VEDL', name: 'Vedanta Ltd' },
{ abbr: 'WIPRO', name: 'Wipro Ltd.' },
{ abbr: 'YESBANK', name: 'Yes Bank Ltd.' },
{ abbr: 'ZEEL', name: 'Zee Entertainment Enterprises Ltd.' }
];
} export function matchStocks(state, value) {
return (
state.name.toLowerCase().indexOf(value.toLowerCase()) !== -1 ||
state.abbr.toLowerCase().indexOf(value.toLowerCase()) !== -1
);
}

最后, App.css 文件看起来像这样。

body {
color: #333;
font-family: "Helvetica Neue", Arial, sans-serif;
font-weight: 200;
} .example {
padding: 0 25px;
} label {
display: block;
margin: 5px 0;
} code {
padding: .2em .5em;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
} .menu {
position: absolute;
box-sizing: border-box;
width: 100%;
border: 1px solid #cccccc;
} .item {
padding: 2px 6px;
cursor: default;
} .item-highlighted {
color: white;
background-color: #4095bf;
} .item-header {
background-color: #eeeeee;
color: #454545;
font-weight: bold;
}

保存所有文件并转到 http:// localhost:3000 /

从数据数组中键入股票,您将获得建议补全列表。

所以,最后,我们已经完成了 React Autocomplete示例教程。感谢您的参与。

React Autocomplete(自动完成输入)示例教程的更多相关文章

  1. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

  2. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

  3. [转]React表单无法输入原因----约束性和非约束性组件

    转自:http://blog.csdn.net/lihongxun945/article/details/46730835 表单是前端非常重要的一块内容,并且往往包含了错误校验等逻辑. React对表 ...

  4. .NET Core R2安装及示例教程

    .NET Core R2安装及示例教程 Install for Windows - Visual Studio 2015 1 Download Visual Studio 2015 Make sure ...

  5. .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程

    本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...

  6. 自动的输入号码的辅助软件在ie浏览器下的尝试

    在ie下面的自动输入号码的软件,我已经折腾了好久.由于ie环境非常复杂:网页延迟这个时间一直不能准确的得到,这个时间主要包括:网络的与服务器的交换速度,网页自身的加载速度,网页的js渲染的效果的影响. ...

  7. emacs 利用 auto-complete 自动补齐

    emacs 利用 auto-complete 自动补齐 1,首先导入melpa,在文件~/.emacs中添加下面代码 (require 'package) (package-initialize) ( ...

  8. [视频]K8飞刀 HackerIE自动检测网站注入教程

    [视频]K8飞刀 HackerIE自动检测网站注入教程 https://pan.baidu.com/s/1c08rihi

  9. 弹窗中使用jquery ui的autocomplete自动完成插件无效果 实际是被遮挡了

    在普通页面上使用jquery ui的autocomplete自动完成插件时正常显示提供选择的下拉框,但是放到弹窗中的时候就无法显示这个选择的下拉框,其它效果正常: 估计是被弹出窗遮挡了,网络搜索了jq ...

随机推荐

  1. 三、Jmeter生成HTML报告

    1.执行jmeter -n -t [接口脚本地址] -l [test.jtl地址] -e -o [报告输出地址] 例如:jmeter -n -t C:\chushujin\youxinscript\j ...

  2. hdu 6219 Empty Convex Polygons (凸包)

    给你n个点,求面积最大的凸多边形,使得这个凸多边形没有内点. 考虑求凸包的graham算法,需要找到左下角的点,再进行极角排序后按顺序扫点,所以先枚举左下角的点. 这个过程中,如果遇到内点,就需要把这 ...

  3. Leon-ai on WSL

    这几天尝试了下Windows10的WSL,的确是良心产品,虽然还有很多待改进的地方(比如iptabeles之类的功能还未支持). 使用了WSL就避免安装双系统的繁琐,节省很多时间,而且因为是微软自家产 ...

  4. OpenStack Nova Placement API 统一资源管理接口的未来

    目录 目录 Placement API 为何称之为 "未来" 操作对象基本概念 数据库操作样例 Placement API 在创建虚拟机时的调度过程 Placement REST ...

  5. 阶段3 1.Mybatis_02.Mybatis入门案例_1.mybatis的入门

    H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\讲义+笔记+资料\主流框架\31.会员版(2.0)-就业课(2.0)-Mybatis\mybatis\mybatis_d ...

  6. MinGW GCC 9.1 2019年5月3日 出炉啦

    GNU 2019-05-03 发布了 GCC 9.1 https://gcc.gnu.org/onlinedocs/9.1.0/ 有详细的说明MinGW 上可用的 GCC 9.1 版本下载地址 [ m ...

  7. VBA计算器的全部实现

    我们将加入 除零逻辑 和 对话框提示. 后面 就很简单了~~~ 提供效果图跟 代码 代码示例 Sub 矩形1_Click() ' ' 矩形1_Click Macro ' 代码编辑 Dim number ...

  8. 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)

    ubuntu更新软件时 apt-get upgrade 遇到 E: 无法获得锁 /: 资源暂时不可用) E: Unable to acquire the dpkg frontend lock (/va ...

  9. adb 连接 mumu 模拟器

    [win版]adb connect 127.0.0.1:7555adb shell [mac版] adb kill-server && adb server && ad ...

  10. SpringBoot自定义Starter实现

    自定义Starter: Starter会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦.Starter 提供了一种开箱即用的理念,其中核心就是springboot的自动配置原理相 ...