reactjs - 如何根据反应js中的内容设置计数
问题描述
when we search the name, based on the name I want to display the count value.
例如,来了 3 个名字,所以找到了 3 个结果。我想要的这种方式。过滤器工作正常。只有我想跟踪记录。这是代码。
app.js
import Filter from './component/Filter';
function App() {
return (
<div className="App">
<header className="App-header">
<Filter />
</header>
</div>
);
}
export default App;
这里我附加了 Filter.js 组件 Filter.js
import React, { Component } from 'react';
class Filter extends Component{
constructor(props){
super(props);
this.state={
searchTerm: "",
names: [{
"first_name": "Mack"
}, {
"first_name": "Andres"
}, {
"first_name": "Bee"
}, {
"first_name": "Donni"
}, {
"first_name": "Pippy"
}, {
"first_name": "Chrystel"
}, {
"first_name": "Etienne"
}, {
"first_name": "Elberta"
}, {
"first_name": "Brion"
}, {
"first_name": "Aurea"
}, {
"first_name": "Kerry"
}, {
"first_name": "Mervin"
}, {
"first_name": "Georgianna"
}]
}
}
render(){
return <>
<div className="filterList">
<input className="slice-item" type="fileName" placeholder="search name" onChange= {event => {this.setState({searchTerm: event.target.value})}} />
<div className="slice-item resultCount">
<span className="num">0</span> results found
</div>
</div>
{
this.state.names.filter((name) => {
if(this.state.searchTerm === ""){
return name;
}else if(name.first_name.toLocaleLowerCase().includes(this.state.searchTerm.toLocaleLowerCase())){
return name;
}
}).map((name) =>(
<h4>{name.first_name}</h4>
))
}
</>
}
}
export default Filter;
几乎完成了。我只想应用结果计数。
Anyone can plz post your answer.
解决方案
只需将过滤器逻辑移到返回之外即可获取名称列表。那么该列表的长度就是结果的数量。
render(){
const filteredNames = this.state.names.filter((name) => {
if(this.state.searchTerm === ""){
return name;
}else if(name.first_name.toLocaleLowerCase().includes(this.state.searchTerm.toLocaleLowerCase())){
return name;
});
const renderResultCount = this.state.searchTerm && this.state.searchTerm.length > 0;
return <>
<div className="filterList">
<input className="slice-item" type="fileName" placeholder="search name" onChange= {event => {this.setState({searchTerm: event.target.value})}} />
<div className="slice-item resultCount">
{ renderResultCount ? <span className="num">{filteredNames.length}</span> results found : null}
</div>
</div>
{
filteredNames.map((name) =>(
<h4>{name.first_name}</h4>
))
}
</>
}
编辑:由于作者在评论中的请求,添加了文本的条件渲染
推荐阅读
- android - 目标片段中未收到 NavDeepLinkBuilder 参数包
- phpmyadmin - phpmyadmin 5.0.2 设置会话 cookie 失败
- html - 如何在宽度适合内部内容的同时将固定 div 水平居中
- python - 有没有办法在 python 中跟踪修改过的字典项?
- arduino - 使用 HC-05 串口从蓝牙读取数据
- python - 使用 groupby 和 value 计数后如何进一步过滤数据框
- ios - SwiftUI · 后台定时器在模拟器上工作,但在真实设备上不工作
- android - 为什么当我重新启动应用程序时编辑文本不可见?
- python - Pandas 列表列:如何获取该列列表长度的平均值、最大长度和标准差
- objective-c - Objective-C 插件因大型数组的初始化而崩溃