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

React中点击按钮无法多次更新投票值问题求助

投票系统点击按钮仅更新一次的问题解决

我正在开发一个投票系统,但点击按钮时投票值仅能更新一次,无法实现每次点击都更新。数据来源于data.json文件,相关代码如下:

const [vote, setVote] = useState<number>(props.score);

const voteUp = () => {
  setVote(props.score + 1);
};

const voteDown = () => {
  setVote(props.score - 1);
};

return (
  <CommentStyled key={props.id}>
    <div>
      <CommentScore>
        <VoteButtonStyled onClick={voteUp}>
          <img src={IconPlus} alt="IconPlus" />
        </VoteButtonStyled>
        {vote}
        <VoteButtonStyled onClick={voteDown}>
          <img src={IconMinus} alt="IconMinus" />
        </VoteButtonStyled>
      </CommentScore>
    </div>
</CommentStyled>

问题原因

投票函数里每次调用setVote时,都依赖**固定的props.score**计算新值。props.score是组件初始化时传入的初始值,不会随着内部状态vote的更新而变化,所以第一次点击后,后续点击始终基于初始值计算,导致看起来没有更新。

解决方案

使用setVote的函数式更新写法,基于当前最新的状态值计算新值:

const [vote, setVote] = useState<number>(props.score);

const voteUp = () => {
  setVote(prevVote => prevVote + 1);
};

const voteDown = () => {
  setVote(prevVote => prevVote - 1);
};

函数式更新会接收当前的状态值(prevVote)作为参数,返回新的状态值,这样每次点击都会基于最新的投票数进行增减,实现连续点击更新的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:27:26