reactjs - 如何将 className 添加到单个 .map 项?
问题描述
我想将 className 添加到 .map 项目,但仅限于被点击的项目。
尝试了 useState ( {state ? "class" : ""} ),但它为我的循环中的所有项目添加了类。我也尝试过 useRef 但我了解到 useRef 不会导致重新渲染,因此结果没有在屏幕上更新。
示例代码:
{posts.map((post)=> {
return (
<div className=`PLACE FOR CLASS` key={post.id}>
{post.title}
<button onClick={()=> onclick event to add class}>add</button>
</div>
)
})}
那么在这种情况下只为单击的项目添加类的方法是什么?(我想我需要使用 Key 但不知道如何)
解决方案
如果您不想将此信息添加到主状态 ( posts
),您可以创建一个单独的选定 id 列表,它将是这样的(假设您正在使用函数组件)
const [selectedPosts, setSelectedPosts]=useState([]);
...
{posts.map((post)=> {
return (
<div className={selectedPosts.includes(post.id) && "myClass"} key={post.id}>
{post.title}
<button onClick={()=> {setSelectedPosts(s => [...s, post.id])}}>add</button>
</div>
)
})}
推荐阅读
- google-apps-script - 在插件中显示电子邮件正文的图像和文本
- sql - T-SQL 递归查询 - 数据沿袭
- html - 如何确认匹配的电子邮件字段?
- python - 执行 Python 代码时自动打开浏览器
- c# - 有没有办法在 .NET Core 的 CorsPolicy 上使用“AllowAnyOrigin”属性?
- javascript - 有条件地将数据从封闭视图传递到部分视图
- angular - 角 6 货币格式,不带 INR 符号的小数点
- excel - 在 PowerQuery/Excel 中管理文件夹刷新
- python - 散景服务器开发模式缺少文件
- sqlite - 我将带有 UTC 日期的行插入到数据库中的 int 列中。如何仅获取过去 24 小时内插入的行?