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

React.js中点击一次后禁用按钮问题求助

解决按钮点击一次后禁用的问题(多按钮场景)

问题原因

你遇到的Expected an assignment or function call and instead saw an expression错误,是因为循环渲染的按钮onClick箭头函数中,handleClick仅被引用但未调用,且没有传递它需要的event参数。

直接修复语法错误

将按钮的onClick回调修改为以下形式,确保调用handleClick并传递事件对象:

<button 
  type="submit" 
  onClick={(event) => {
    addLike(val.id, val.likes + 1);
    handleClick(event); // 调用handleClick并传入event
  }} 
  className="btn btn-success"
>
  LIKE
</button>

修改后,单个按钮的禁用逻辑就能在多按钮场景下生效,点击后当前按钮会被禁用。

更推荐的React状态管理方案

直接操作DOM(event.currentTarget.disabled = true)在React中并非最佳实践,列表渲染场景下组件重新渲染后禁用状态可能丢失。建议通过React状态控制按钮禁用:

  1. 初始化状态记录每个按钮的禁用状态:
import { useState } from 'react';

// 用对象存储每个广告ID对应的禁用状态,初始为空
const [disabledButtons, setDisabledButtons] = useState({});
  1. 编写点击处理函数,通过状态控制禁用:
const handleLikeClick = (adId, currentLikes) => {
  // 更新状态,标记当前广告的按钮为禁用
  setDisabledButtons(prevState => ({
    ...prevState,
    [adId]: true
  }));
  // 执行点赞逻辑
  addLike(adId, currentLikes + 1);
};
  1. 修改按钮组件,用状态控制disabled属性:
<button 
  type="submit" 
  onClick={() => handleLikeClick(val.id, val.likes)} 
  className="btn btn-success"
  disabled={disabledButtons[val.id] || false}
>
  LIKE
</button>

这种方式通过React状态管理禁用状态,更符合React的数据流模式,避免直接操作DOM带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:35:15