【问题标题】:Run useEffect only on button click仅在单击按钮时运行 useEffect
【发布时间】:2022-01-05 14:01:10
【问题描述】:

我正在制作一个喜欢和不喜欢帖子数据来自后端的帖子的功能

  const blog = {
    likeStatus: false
  }
  const [liked, setLiked] = useState(blog.likeStatus);

  const likeAPI = (status) => {
    console.log(status);
  } 
  useEffect(() => {
    let status = liked ? 'LIKE' : 'DISLIKE';
    likeAPI(status); // API for liking and disliking a post
  }, [liked])
  return (
    <div className="App">
      <button style={{backgroundColor: liked ? 'green' : 'white'}}
        onClick={() => setLiked(!liked)}
      >
        Like
      </button>
    </div>
  );

这是功能的代码

我只想在单击 button 之类时运行 useEffect,但 useEffect 最初也运行并且类似状态发送到后端导致错误数据

有人可以帮我解决这个问题吗?

任何其他逻辑表示赞赏

【问题讨论】:

标签: reactjs use-effect


【解决方案1】:

您无需使用 useEffect 挂钩就可以做到这一点,如下所示:

const blog = {
  likeStatus: false,
};
const [liked, setLiked] = useState(blog.likeStatus);

const likeAPI = (status) => {
  console.log(status);
};

const handleClick = (liked) => {
  setLiked(liked);
  let status = liked ? "LIKE" : "DISLIKE";
  likeAPI(status); // API for liking and disliking a post
};

return (
  <div className="App">
    <button
      style={{ backgroundColor: liked ? "green" : "white" }}
      onClick={() => handleClick(!liked)}
    >
      Like
    </button>
  </div>
);

【讨论】:

  • 这行得通吗?由于useState是异步的,所以不会立即更新状态
  • 会的。你没试过吗?因为 setLiked 中使用的状态相同,并且作为 likeAPi 函数的参数
  • 哦,是的!我知道你在做什么。我真的很愚蠢,没想到
猜你喜欢
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
相关资源
最近更新 更多