【发布时间】:2022-01-05 01:33:30
【问题描述】:
我有一个显示文章标题列表的页面。在这个页面上,我添加了一个搜索栏和一个下拉菜单,以便能够过滤这个数组。 onChange 我正在调用setSearchTerm 的搜索的输入字段。我还有一个All, True and False 的下拉过滤器菜单,此数组中有一个对象completed。点击真/假后,它会根据文章是否完成过滤并返回。
单独来说,它们都按预期运行,但是当我让它们一起工作时,我遇到了一些问题。我希望能够在过滤的文章标题中进行搜索。例如。如果我选择“True”,我希望能够搜索所有“True”文章。因此,该数组将通过下拉值“True”和在搜索栏中输入的单词进行过滤。
这是我苦苦挣扎的地方:
} else if (searchTerm != "" && filter != "") {
console.log('here')
// return what includes the search term
val.title.toLowerCase().includes(searchTerm.toLowerCase())
return val
}
根据逻辑,我期望当 search 和 filter 都不为空时,返回与搜索词匹配的内容。目前,下拉和搜索都没有返回任何内容。
这是整个逻辑设置:
let posts = articles.filter((val) => {
// if search is empty and if "all" or nothing is selected return the entire array
if (searchTerm == "" && filter == "" || filter == "all") {
return val
// if the filter is not selected, return whats included with the search term
} else if (filter == "" && val.title.toLowerCase().includes(searchTerm.toLowerCase())) {
return val
// if search is empty and filter drop down value exists return what matches with the filter
} else if (searchTerm == "" && val.completed.toString().includes(filter)) {
return val
// if there neither are empty do logic here
} else if (searchTerm != "" && filter != "") {
console.log('here')
// return what includes the search term
val.title.toLowerCase().includes(searchTerm.toLowerCase())
return val
}
})
这是我的完整代码sn-p:
import { useState, useEffect } from 'react';
const Posts = ({ articles }) => {
const [searchTerm, setSearchTerm] = useState("");
const [filter, setFilter] = useState("")
let posts = articles.filter((val) => {
// if search is empty and if "all" or nothing is selected return the entire array
if (searchTerm == "" && filter == "" || filter == "all") {
return val
// if the filter is not selected, return whats included with the search term
} else if (filter == "" && val.title.toLowerCase().includes(searchTerm.toLowerCase())) {
return val
// if search is empty and filter drop down value exists return what matches with the filter
} else if (searchTerm == "" && val.completed.toString().includes(filter)) {
return val
// if there neither are empty do logic here
} else if (searchTerm != "" && filter != "") {
console.log('here')
// return what includes the search term
val.title.toLowerCase().includes(searchTerm.toLowerCase())
return val
}
})
return (
<>
<select value={filter} onChange={(event) => {setFilter(event.target.value)}} className="dropmenu dropdown-menu">
<option value="">All</option>
<option value="true">True</option>
<option value="false">False</option>
</select>
<input
type="text"
placeholder="Search..."
onChange={(event) => {
setSearchTerm(event.target.value);
}}
/>
<h1>h1</h1>
<ul className='list-group mb-4'>
{posts && posts.map(post => (
<li key={post.id} className='list-group-item'>
{post.title}
</li>
))}
</ul>
</>
);
};
export default Posts;
当文章被True或False过滤时,我如何设置这个条件来让用户可以搜索?
文章数组:
const articles = [{"title": "title one", completed: false},
{"title": "article two", completed: true},
{"title": "testing three", completed: false},
{"title": "title four", completed: false},
{"title": "title five", completed: true}]
【问题讨论】:
标签: javascript reactjs react-hooks