Javascript 在React/Redux中同时搜索和排序
我正在为一个测试博客应用程序开发一个简单的搜索和排序机制 每一个单独的函数都能正常工作,但我在将它们拼接在一起时遇到了麻烦 我只是希望用户能够有能力搜索一个博客标题,同时也有能力排序的博客喜欢。我可能会在将来的某个时候添加过滤功能,所以我想确保我的设置是正确的 我尝试了多种方法在我的博客组件(我在这里列出了博客)中将这两个部分结合在一起,但没有任何运气 这是我的搜索函数,它接受一个搜索词(变量“search”)和当前的“blogs”状态,还有我的过滤函数,它只是根据blog喜好进行排序Javascript 在React/Redux中同时搜索和排序,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我正在为一个测试博客应用程序开发一个简单的搜索和排序机制 每一个单独的函数都能正常工作,但我在将它们拼接在一起时遇到了麻烦 我只是希望用户能够有能力搜索一个博客标题,同时也有能力排序的博客喜欢。我可能会在将来的某个时候添加过滤功能,所以我想确保我的设置是正确的 我尝试了多种方法在我的博客组件(我在这里列出了博客)中将这两个部分结合在一起,但没有任何运气 这是我的搜索函数,它接受一个搜索词(变量“search”)和当前的“blogs”状态,还有我的过滤函数,它只是根据blog喜好进行排序 cons
const searchBlogs = ({ blogs, search }) => {
return search
? blogs.filter(a => a.title.toLowerCase().includes(search.toLowerCase()))
: blogs;
};
const filterBlogs = ({ blogs, filter }) => {
if (filter === "DESC") {
return blogs.sort((a, b) => b.likes - a.likes);
} else {
return blogs.sort((a, b) => a.likes - b.likes);
}
};
我在mapstatetoprops中存储搜索后博客的更新状态,如下所示:
blogsToShow: searchBlogs(state)
然后映射到我的博客组件中的blogsToShow
const Blogs = ({ blogsToShow }) => {
return (
<ul>
{blogsToShow.map(blog => (
<Blog key={blog.id} blog={blog} user={blog.user} />
))}
</ul>
);
};
我知道必须有一种更简单、更有效的方法来做到这一点
注意,我不想在此发布太多代码,但这是我的搜索组件,我正在将其发送到redux商店:
const Search = props => {
const handleSearch = event => {
props.searchChange(event.target.value.toLowerCase());
};
const handleFilter = event => {
props.filterChange(event.target.value);
};
const style = {
marginBottom: 10
};
return (
<div style={style}>
search
<input onChange={handleSearch} />
<select onChange={handleFilter}>
<option value="DESC">Sort Likes Descending</option>
<option value="ASC">Sort Likes Ascending</option>
</select>
</div>
);
};
const mapStateToProps = state => {
return {
filter: state.filter,
search: state.search
};
};
export default connect(mapStateToProps, { searchChange, filterChange })(Search);
const Search=props=>{
const handleSearch=事件=>{
searchChange(event.target.value.toLowerCase());
};
const handleFilter=事件=>{
props.filterChange(event.target.value);
};
常量样式={
marginBottom:10
};
返回(
搜索
排序喜欢下降
排序喜欢上升
);
};
常量mapStateToProps=状态=>{
返回{
过滤器:state.filter,
搜索:state.search
};
};
导出默认连接(mapStateToProps,{searchChange,filterChange})(搜索);
嗯,我想出了一个可行的办法,但不是很优雅
如果有人有更好的主意,我洗耳恭听。谢谢<代码>在此处输入代码
const Blogs = ({ blogsToShow, filter }) => {
return (
<ul>
{filter === "DESC"
? blogsToShow
.sort((a, b) => b.likes - a.likes)
.map(blog => <Blog key={blog.id} blog={blog} user={blog.user} />)
: blogsToShow
.sort((a, b) => a.likes - b.likes)
.map(blog => <Blog key={blog.id} blog={blog} user={blog.user} />)}
</ul>
);
};
constblogs=({blogsToShow,filter})=>{
返回(
{filter==“DESC”
?博客秀
.sort((a,b)=>b.likes-a.likes)
.map(blog=>)
:blogsToShow
.sort((a,b)=>a.likes-b.likes)
.map(blog=>)}
);
};
const Blogs = ({ blogsToShow, filter }) => {
return (
<ul>
{filter === "DESC"
? blogsToShow
.sort((a, b) => b.likes - a.likes)
.map(blog => <Blog key={blog.id} blog={blog} user={blog.user} />)
: blogsToShow
.sort((a, b) => a.likes - b.likes)
.map(blog => <Blog key={blog.id} blog={blog} user={blog.user} />)}
</ul>
);
};