使用 React Hooks 根据搜索输入值重新加载 objects 的数组
Reload an array of objects depending on search input value using React Hooks
我想重新加载 objects 的数组并使其根据搜索输入值显示。
例如,有一个搜索输入和一个评论列表(标题 + 评论)。
当用户在搜索输入中键入“a”时,列表将重新加载并为您提供标题中包含“a”的列表。并且标题中不包含“a”的项目将不会出现。
当用户在搜索输入中键入“ab”时,列表将重新加载并为您提供标题中包含“ab”的列表。并且标题中不包含“ab”的项目将不会出现。
你可以在这里看看我目前的迷你项目:https://distracted-golick-f00481.netlify.app/
您可以添加评论列表,它会保存到本地存储中。该列表将按字母顺序和更高的排名排序。
==========
Reviews.js(包括评论列表)
import React, { useState } from "react";
import Header from "./Header";
import Review from "./Review";
import Input from "./Input";
const Reviews = ({ books, initialData }) => {
const combinedBooks = initialData.concat(books);
const [myBooks, setMyBooks] = useState(combinedBooks);
const [searchTerm, setSearchTerm] = useState("");
// sort by rank
let sorted = combinedBooks.sort((a, b) => {
return b.score - a.score;
});
// sort by alphabetical order
let newSorted = sorted.sort(function (a, b) {
let fa = a.title.toLowerCase(),
fb = b.title.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
});
// sort by rank then alphabetically
let newerSorted = [...newSorted].sort((a, b) => {
return b.score - a.score;
});
// Reload the data based on the search input value.. BUT How?
return (
<section style={{ border: "3px solid green" }}>
<Header title="Book Review Lists" />
{/* search input to find the book review by title */}
<form>
<Input
smallTitle=""
placeholder="find the review by title"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
/>
</form>
<h1>{searchTerm}</h1>
{newerSorted.map((review) => {
const { id, title, comment, score } = review;
return (
<Review key={id} title={title} comment={comment} score={score} />
);
})}
</section>
);
};
export default Reviews;
对于 title
属性.
中包含 searchTerm
值的评论,您可以在映射 newerSorted
数组之前进行右内联过滤
{newerSorted.filter(({ title }) => title.toLowerCase().includes(searchTerm.toLoweCase()))
.map(({ id, title, comment, score }) => (
<Review key={id} title={title} comment={comment} score={score} />
))
}
我想重新加载 objects 的数组并使其根据搜索输入值显示。
例如,有一个搜索输入和一个评论列表(标题 + 评论)。
当用户在搜索输入中键入“a”时,列表将重新加载并为您提供标题中包含“a”的列表。并且标题中不包含“a”的项目将不会出现。
当用户在搜索输入中键入“ab”时,列表将重新加载并为您提供标题中包含“ab”的列表。并且标题中不包含“ab”的项目将不会出现。
你可以在这里看看我目前的迷你项目:https://distracted-golick-f00481.netlify.app/
您可以添加评论列表,它会保存到本地存储中。该列表将按字母顺序和更高的排名排序。
==========
Reviews.js(包括评论列表)
import React, { useState } from "react";
import Header from "./Header";
import Review from "./Review";
import Input from "./Input";
const Reviews = ({ books, initialData }) => {
const combinedBooks = initialData.concat(books);
const [myBooks, setMyBooks] = useState(combinedBooks);
const [searchTerm, setSearchTerm] = useState("");
// sort by rank
let sorted = combinedBooks.sort((a, b) => {
return b.score - a.score;
});
// sort by alphabetical order
let newSorted = sorted.sort(function (a, b) {
let fa = a.title.toLowerCase(),
fb = b.title.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
});
// sort by rank then alphabetically
let newerSorted = [...newSorted].sort((a, b) => {
return b.score - a.score;
});
// Reload the data based on the search input value.. BUT How?
return (
<section style={{ border: "3px solid green" }}>
<Header title="Book Review Lists" />
{/* search input to find the book review by title */}
<form>
<Input
smallTitle=""
placeholder="find the review by title"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
/>
</form>
<h1>{searchTerm}</h1>
{newerSorted.map((review) => {
const { id, title, comment, score } = review;
return (
<Review key={id} title={title} comment={comment} score={score} />
);
})}
</section>
);
};
export default Reviews;
对于 title
属性.
searchTerm
值的评论,您可以在映射 newerSorted
数组之前进行右内联过滤
{newerSorted.filter(({ title }) => title.toLowerCase().includes(searchTerm.toLoweCase()))
.map(({ id, title, comment, score }) => (
<Review key={id} title={title} comment={comment} score={score} />
))
}