为什么不渲染更新状态?

Why react not rendering updated state?

我的应用程序中有一个社区功能,用户可以在其中 post 他们 comments.I 想要在单击特定图标时切换评论的可见状态。 图标:

 <i className="fa-solid fa-message" onClick={(e)=>handleComment(e)}></i>
        {!props.post.isCommentVisible && <> <Container maxW="md" centerContent p={8}>
          {props.post.comment.map((comm) => (
            <Text>{comm}</Text>
          ))}

切换ccomment可见性的函数是:

function handleComment(e)
  {
    const id=props.post.id;
    posts.map((post)=>{
      if(post.id==id)
      {
       if(post.isCommentVisible=="false")
       {
         post.isCommentVisible="true";
       }
       else
       {
        post.isCommentVisible="false";
       }
         
         
       db.collection("posts").doc(id).set(post);
      }
    })

  }

有趣的是,评论的可见状态已更新,但 React 不会重新呈现更改后的状态。

无论 props.post.isCommentVisible"true" 还是 "false",表达式 !props.post.isCommentVisible 将始终是 false,因为 "anyString" 始终为真。

假设你在某处定义:

const [posts, setPosts] = useState([]);

然后通过一些获取操作更新填充的posts,你必须像这样调用setPosts

setPosts(
    posts.map((x) => ({
        ...x,
        isCommentVisible:
            x.id === post.id ? !x.isCommentVisible : x.isCommentVisible,
    }))
);

(使用任何你想要的方法来获得结果,注意 Rocky Sims 的评论)

这将导致 re-render。