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

React问答应用:点击错误选项时如何高亮正确按钮?

解决方案

在React里直接操作DOM元素样式并不是最佳实践,更推荐用状态驱动UI的方式来实现需求,这样能轻松控制所有按钮的样式状态,不需要手动查找DOM元素。

步骤1:添加状态变量

先在组件里新增两个状态,分别跟踪选中的答案和是否显示反馈样式:

import { useState } from 'react';

// ... 其他组件代码

const [selectedAnswer, setSelectedAnswer] = useState(null);
const [showFeedback, setShowFeedback] = useState(false);

步骤2:修改点击事件处理函数

不再直接操作e.target,而是通过更新状态来触发UI变化:

const handleClick = async (answer) => {
  // 如果是正确答案,更新分数
  if (answer.isCorrect) {
    setScore(prevScore => prevScore + 1);
  }
  
  // 记录选中的答案,并开启反馈显示
  setSelectedAnswer(answer);
  setShowFeedback(true);
  
  // 等待1.5秒后重置状态
  await delay(1500);
  setShowFeedback(false);
  setSelectedAnswer(null);
};

步骤3:根据状态渲染按钮样式

遍历答案时,根据当前状态判断每个按钮的样式:

const listOfAnswers = questions[questionNumber].possibleAnswers.map((q) => {
  let buttonStyle = {};
  
  // 只有在显示反馈的阶段才设置颜色
  if (showFeedback) {
    // 正确答案始终变绿
    if (q.isCorrect) {
      buttonStyle.backgroundColor = 'green';
    }
    // 选中的错误答案变红
    else if (selectedAnswer === q) {
      buttonStyle.backgroundColor = 'red';
    }
  }

  return (
    <Button                
      onClick={() => handleClick(q)}
      style={buttonStyle}
    >
      {q.answer}
    </Button>
  )
})

为什么这个方案更好?

  • 符合React的声明式编程思想,UI完全由状态控制,避免了手动操作DOM的副作用。
  • 不需要传递DOM相关参数或查找元素,逻辑更清晰,也更容易维护。
  • 天然支持多按钮的样式控制,轻松实现“错误按钮变红+正确按钮变绿”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:31:10