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

React Quiz应用开发:选中≥4个选项后显示单按钮的实现

问题:点击选项次数≥4时,在所有问答元素下方添加「查看答案」按钮

简单实现方法

1. 调整按钮位置

你之前把按钮写在Template组件里,会导致每个题目下方都出现按钮。正确的做法是把按钮放在Page1组件的返回内容里,所有题目列表的最下方,这样只会显示一个全局的按钮。

2. 修正显示条件

你的需求是点击次数≥4,所以判断条件要改成count >= 4(之前代码里写的是>=3,不符合要求)。

3. (可选)优化点击计数逻辑

现在的代码里,用户重复点击同一题的选项,count也会一直增加。如果想让每个题目只算一次点击(不管用户选多少次),可以在计数前先判断当前题是否已经选过选项。


修改后的关键代码片段

调整Page1组件的返回部分

export default function Page1(props) {
  // ... 其他代码不变 ...

  const newQuizData = quizData.map((question) => {
    return (
      <Template
        key={question.id}
        id={question.id}
        question={question.question}
        answers={question.answers}
        handleSelect={handleSelect}
        // 删掉count传递,Template不再需要它
        // count={count}
      />
    );
  });

  // 修改return,把按钮放在所有题目下方
  return (
    <div>
      {newQuizData}
      {count >= 4 && (
        <button onClick={() => {
          // 这里可添加查看答案逻辑,比如高亮正确选项、计算得分等
          console.log("查看答案");
        }}>查看答案</button>
      )}
    </div>
  );
}

删除Template组件里的多余代码

把Template里的这一行删掉:

{props.count >= 3 && <button></button>}

(可选)优化handleSelect的计数逻辑

function handleSelect(id, selectedAnsId) {
  setQuizData((prevQuizData) => {
    // 找到当前题目,检查是否已有选中选项
    const targetQuestion = prevQuizData.find(q => q.id === id);
    const hasSelectedOption = targetQuestion.answers.some(ans => ans.isSelected);

    // 仅当前题未选过选项时,才增加计数
    if (!hasSelectedOption) {
      setCount(prev => prev + 1);
    }

    // 原有选项选中逻辑保持不变
    return prevQuizData.map((question) => {
      return question.id === id
        ? {
            ...question,
            answers: question.answers.map((answer) => {
              return answer.id === selectedAnsId
                ? { ...answer, isSelected: !answer.isSelected }
                : { ...answer, isSelected: false };
            })
          }
        : question;
    });
  });
}

内容的提问来源于stack exchange,提问作者Cable-Nerd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:45:30