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

如何让React问卷组件中点击后的答案按钮保持高亮?

解决方案:结合组件状态实现已选按钮持久高亮

很遗憾,仅靠CSS无法实现已选按钮保持高亮的效果——因为CSS的focus状态是临时的:当用户点击其他元素时,之前获得焦点的按钮会自动失去focus状态,样式也就恢复默认了。要实现持久高亮,必须结合组件的状态来标记已选中的选项,再通过CSS类来应用高亮样式。

下面是具体的修改步骤:

1. 修改QuestionBox组件,添加选中状态判断

我们已经在Survey组件的state里记录了每个问题的答案,只需要把这个答案传递给QuestionBox,并在渲染按钮时判断当前选项是否是已选中的答案,给对应的按钮添加一个selected类:

const QuestionBox = ({ question, answer, onSelect }) => {
  const { question: questionText, answers } = question; // 解构重命名避免变量冲突
  return (
    <div>
      <p>
        {questionText}
        <br/>
        {answers.map((text, index) => (
          <button 
            className={`questionBtns ${answer === text ? 'selected' : ''}`} 
            key={index} 
            onClick={() => onSelect(text)}
          >
            {text}
          </button>
        ))}
      </p>
    </div>
  );
};
export default QuestionBox;

2. 添加CSS高亮样式

给selected类设置你想要的高亮样式,比如和focus状态一致的效果:

.questionBtns {
  /* 你的默认按钮样式 */
  padding: 8px 16px;
  margin: 4px;
  border: 1px solid #ccc;
  border-radius: 4px;
  background: white;
  cursor: pointer;
}

.questionBtns:focus,
.questionBtns.selected {
  /* 高亮样式,比如改变背景色和边框 */
  background-color: #4CAF50;
  color: white;
  border-color: #45a049;
}

3. 为什么必须修改组件?

CSS的状态(比如focus、hover)都是基于当前交互的临时状态,无法持久保存用户的选择记录。而我们需要的是持久化的选中状态,这必须依赖组件的state来存储用户的选择,再通过条件渲染给对应的按钮添加样式类,这样即使点击其他按钮,已选中的按钮也能保持高亮。

这样修改后,用户每选一个选项,对应的按钮就会一直保持高亮状态,完全符合你的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:48:57