You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在React的map遍历函数中如何设置state?现有setPostId写法不生效怎么办?

问题解决:React列表点击时更新对应item id到state

问题根因

你写的{() => setPostId(post.id)}放置在JSX的子节点位置,React渲染时只会将其识别为普通函数对象,不会主动执行该函数,因此状态更新逻辑从未触发。
你的需求是点击对应列表项时将当前post的id存入state,这段逻辑需要绑定到Content组件的onClick事件中,和原有的打开弹窗逻辑合并即可。

修正后代码

const [postId, setPostId] = useState();

return (
  <Container>
    {list?.map((post, idx) => (
      // 优化建议:如果列表存在增删/排序场景,key建议用唯一值post.id代替index
      <Content 
        key={post.id} 
        onClick={() => {
          setPostId(post.id);
          openModal();
        }}
      >
        {post.id}
        {post.title}
      </Content>
    ))}

    <Modal data={postId} state={modalState} closeModal={closeModal} />
    <div ref={observer} />
    <div>{isLoading ? <Loading /> : "Data END"} </div>
  </Container>
);
}

export default Posts

逻辑说明

点击列表项时,会先执行setPostId将当前点击项的id更新到state,再调用openModal打开弹窗,此时Modal组件接收到的data属性就是对应点击项的id。

内容的提问来源于stack exchange,提问作者JB P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:27:03