javascript - 如何在根据星级(声誉)过滤用户的反应js中以模式打印星形图标?
问题描述
我想在反应 js 中打印星形图标,就像在第一行 1 和第二行 2 星一样。
我试过了
const [userList, setUsersList] = useState([]);
const [starClicked, setStarClicked] = useState();
return (
<div className="App">
{[...Array(5)].map((star, idx) => {
return (
<p key={idx} onClick={() => setStarClicked(idx + 1)}>
<StarOutlinedIcon />
</p>
);
})}
{starClicked
? userList
.filter((d) => d.stars === starClicked)
.map((d) => {
return <li key={d._id}> {d.userName} </li>;
})
: userList.map((d) => {
return <li key={d._id}> {d.userName} </li>;
})}
这对过滤部分的效果很好,但在一条垂直线上只打印了 5 颗星。我想在 1 行中打印 1 颗星,在第 2 行中同样打印 2 颗星
解决方案
您需要另一个循环来根据它们的索引渲染星星:
{[...Array(5)].map((star, idx) => {
const actualIndex = idx + 1;
return (
<p key={idx} onClick={() => setStarClicked(actualIndex)}>
{[...Array(actualIndex)].map((_, starIdx) => (
<StarOutlinedIcon key={starIdx} />
))}
</p>
);
})}
推荐阅读
- mysql - MySQL - 检查空结果
- python - 在测试期间模拟环境变量
- spring - 带有会话的 Spring Boot CSRF
- javascript - 我的 API 响应正文中名为“locale”的属性在某些浏览器中被覆盖
- ruby - 如何知道调用了哪个类成员函数?
- android - Android Studio - Kotlin:导入按钮
- android - 如何在 Android Studio 中禁用或编程暗/夜模式?
- javascript - 如何在 Javascript 同意之前阻止 cookie
- sql - How to compute the value based on criteria of other cells In Google Sheet Query?
- php - WooCommerce 不允许针对特定产品类别的 ClearPay 付款