当前位置: 首页 > 知识库问答 >
问题:

测验不阻挡回答的问题

欧阳骏俊
2023-03-14

测验一般都可以,但当我在同一答案中点击2次时,我会数到2次分数,就像在同一正确答案中点击100次一样,我得到100分。我不知道如何修理它。。请帮忙。。。

问题箱:

const QuestionBox = ({ question, options, selected }) => {
    const [answer, setAnswer] = useState(options);
    return (
        <div className="questionBox">
            <div className="question">{question}</div>
            {(answer || []).map((text, index) => (
                <button key={index} className="answerBtn" onClick={() => {
                    setAnswer([text]);
                    selected(text)
                }}>{text}</button>
            ))}
        </div>
    )
}

computeAnswer:

computeAnswer = (answer, correctAnswer) => {
        if (answer === correctAnswer) {
            this.setState({
                score: this.state.score + 1,
            })

提供:

{this.state.qBank.map(
                            ({ question, answers, correct, id }) => (
                                <QuestionBox key={id} question={question} options={answers} selected={Answers => this.computeAnswer(Answers, correct)} />

                            )
                        )}

共有2个答案

慕志泽
2023-03-14

当前,answer将是可能的答案字符串数组,或者是包含用户选择的单个答案的数组。您可以对其进行更改,以便仅当答案的长度大于1时,才会连接click listener:

<button key={index} className="answerBtn" onClick={answer.length === 1 ? null : () => {
    // rest of the code

这样,一旦用户选择了答案,进一步单击(现在是单渲染)按钮将不起任何作用,并且分数只会(可能)在第一次单击按钮时增加。

对于一个答案字符串集合来说,回答是一个有点奇怪的变量名——为了更好的可读性,也许可以将其重命名为回答选项可能的回答或类似的东西。

陶弘业
2023-03-14

您可以将布尔标志设置为问题框状态,初始化为false,并在第一次单击时切换为true,然后如果此标志为true,则绕过分数计算:

const QuestionBox = ({ question, options, selected }) => {
    const [answer, setAnswer] = useState(options);
    const [alreadyAnswered, setAlreadyAnswered] = useState(false);

    return (
        <div className="questionBox">
            <div className="question">{question}</div>
            {(answer || []).map((text, index) => (
                <button disabled={alreadyAnswered} key={index} className="answerBtn" onClick={() => {
                    if(!alreadyAnswered) {
                        setAnswer([text]);
                        selected(text);
                        setAlreadyAnswered(true);
                    }
                }}>{text}</button>
            ))}
        </div>
    )
}

我还添加了禁用属性,若问题已经被回答,让用户知道这是一次性的。

此外,将onhtml逻辑放在一个函数中以提高性能也是一个好主意(https://medium.com/@Charles_Stover/cache-you-react-event-listeners-to-提高性能-14f635a62e15)。

顺便说一下,你应该避免用道具初始化状态:反应组件从道具初始化状态

 类似资料:
  • 在上一章节里面,我给大家演示了一个Prolog特有的神奇的功能:它能够回答你提出的问题!在这一章里面,我将简单的解释一下Prolog是如何能够回答你的问题的。 首先,还是自己试着把下面的程序写一下,然后加载到SWI-Prolog里面。 parent(di,yuqing). parent(keyuan,jianbo). parent(jianbo,di). ancestor(X,Y):-paren

  • 面试技巧指的是在面试时候的技巧。以下是出国留学网小编整理的面试中的问题及回答技巧,欢迎参考,更多详细内容请点击出国留学网查看。 问题一:“请你自我介绍一下” 思路: 1、这是面试的必考题目。 2、介绍内容要与个人简历相一致。 3、表述方式上尽量口语化。 4、要切中要害,不谈无关、无用的内容。 5、条理要清晰,层次要分明。 6、事先最好以文字的形式写好背熟。 问题二:“谈谈你的家庭情况” 思路: 1

  • 获取回答列表 获取一个回答详情 回答一个提问 采纳一个回答 更新一个回答 删除一个回答 获取用户发布的回答列表 获取回答列表 GET /questions/:question/answers 参数 名称 类型 描述 limit Integer 默认 20 ,获取列表条数,修正值 1 - 30。 offset integer 默认 0 ,数据偏移量,传递之前通过接口获取的总数。 order_typ

  • 主试者可能会问你一些与申请职位完全无关的问题,目的在进一步了解你的思考能力及见识,不要表现出不耐烦或惊讶,以免给雇主一个太计较的印象。以下是出国留学网小编为大家整理的面试的时候回答问题的技巧,欢迎大家阅读,更多精彩内容请关注出国留学网. 诚实有礼 态度诚恳,不宜过分客套和谦卑。 不太明白主试者的问题时,应礼貌地请他重复。 陈述自己的长处时,要诚实而不夸张,视乎申请职位的要求,充份表现自己有关的能力

  • 虽然面试前做了充足的准备,但具体到了面试时,当你与面试官相对而坐,他究竟在想些什么呢?他向你提的问题究竟有什么更深一层的含义呢?以下是出国留学网小编为大家整理的面试遇薪水问题的回答技巧,欢迎大家阅读,更多精彩内容请关注出国留学网. 问:每次去面试,面试官开口的第一句话都是让我自我介绍,可是我的简历上都写得很明白了,还要我讲什么呢? 答:面试官让你做自我介绍,其实是有好几层的含义。其一,通过自我介绍

  • 1. 首先自我介绍,因为大家真的不了解,这就需要我们在最短的时间内向面试官表达最有效和最有利的信息。一般要包括班级、姓名、性格特征、相关的经历经验及一些重要的获奖情况等。 2. 你的自我介绍很短,你认为它能突出你的优点吗?或者说你的介绍很长,你不觉得没有必要吗? 不能全部突出我的优点,但至少说明我的态度:简单、明快、不做作。 我做自我介绍可以不具备太多的辞藻,但是我认为我要有端正的态度。 3.你为