Я собираюсь отфильтровать данные, установив другой флажок с помощью следующих кодов:
const movieData = [
{
title: "movie 0",
genre: ""
},
{
title: "movie 1",
genre: ["action", "thriller"]
},
{
title: "movie 2",
genre: ["comedy", "drama"]
},
{
title: "movie 3",
genre: ["comedy", "action"]
},
{ title: "movie 4", genre: "thriller" },
{
title: "movie 5",
genre: "comedy"
},
{
title: "movie 6",
genre: "action"
},
{
title: "movie 7",
genre: "drama"
}
];
const movie = [
{ genre: "thriller" },
{ genre: "comedy" },
{ genre: "action" },
{ genre: "drama" }
];
const FilterMethod01 = () => {
const [genre, setGenre] = useState([""]);
const [filteredGenre, setFilteredGenre] = useState([""]);
const handleChange = e => {
if (e.target.checked) {
setGenre([...genre, e.target.value]);
} else {
setGenre(genre.filter(id => id !== e.target.value));
}
};
useEffect(() => {
setFilteredGenre(
movieData.filter(movie =>
genre.some(category => category === movie.genre)
)
);
}, [genre]);
return (
<Fragment>
<FormControl>
<FormGroup>
{movie.map(movie => (
<FormControlLabel
control={<Checkbox onChange={handleChange} />}
label={movie.genre}
value={movie.genre}
/>
))}
</FormGroup>
</FormControl>
{filteredGenre
.map((movie, index) => (
<Card style={{ background: "lightgreen", marginBottom: "5px" }}>
<Typography gutterBottom variant="h6" noWrap>
title: {movie.title}
</Typography>
<Typography gutterBottom variant="h6" noWrap>
genre: {movie.genre}
</Typography>
</Card>
))}
</Fragment>
);
};
Однако у меня есть следующие проблемы с этим кодом:
Все сопоставленные данные ["movie 0", "movie 1", "movie 2", "movie 3"...]
не отображаются по умолчанию. Как я могу сделать так, чтобы все сопоставленные данные отображались по умолчанию?
Сопоставленные данные фильтруют только одну строку (например, {genre: ""}
) вместо массива строк (например, {genre: ["thriller", "action"]}
). Как установить флажок «действие», чтобы отобразились «mov ie 1», «mov ie 3» и «mov ie 6»? # Оформить заказ мой коды и здесь . # Если есть другие лучшие методы для достижения этого результата, дайте мне знать. Спасибо большое, ребята!