reactjs - 条件按钮真假反应
问题描述
我相信错误可能在这里......
{options.map((option) => (
<button
key={option}
className={`${myAnswer === option
? "true"
: myAnswer !== option
? "button"
: "false"
}`}
onClick={() => this.checkAnswer(option)}
>
{option}
</button>
))}
我如何确保当用户单击正确答案时 True 类(出现)以及当他单击错误答案时 False 类出现在其他按钮上。是否可以在第一次单击后将按钮禁用,从而无法更改答案?
-
-
-
演示代码< - - -
-
-
解决方案
是否可以在第一次单击后将按钮禁用,从而无法更改答案?
是的,我们可以通过不同的方式禁用这些操作。在下面的示例中,我使用isSubmitted
它来了解是否在单击答案时执行操作。我们也可以禁用使用css
。
const { useState } = React;
const data = {
question: "Dummy Question?",
answers: ["A", "B", "C", "D"],
correctAnswer: "B"
}
const Quiz = () => {
const [selectedAnswer, setSelectedAnswer] = useState("");
const [isSubmitted, setIsSubmitted] = useState(false);
const [isError, setIsError] = useState(false);
const onSelectAnswer = answer => {
if(isSubmitted) return;
setIsSubmitted(true);
setSelectedAnswer(answer);
setIsError(data.correctAnswer !== answer);
}
const getAnswerClass = (answer) => {
if(!isSubmitted) {
return "";
} else if(data.correctAnswer === answer) {
return "correct";
}
return isError ? "incorrect": "";
}
return (
<div>
<h3>{data.question}</h3>
{data.answers.map(answer => (
<p key={answer}
className={getAnswerClass(answer)}
onClick={() => { onSelectAnswer(answer)}}
>
{answer}
</p>
))}
</div>
)
}
ReactDOM.render(<Quiz />, document.getElementById("react"));
p {
border: 1px solid lightgrey;
padding: 20px;
}
.correct {
background: #5aad5a;
}
.incorrect {
background: #fa7f7f;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.12.0/umd/react-dom.production.min.js"></script>
<div id="react"></div>
在这里,为简单起见,我只使用了一个问题。但这可以根据您的要求进行扩展。
推荐阅读
- loops - Pentaho 数据集成转换中的循环
- django - 只有在 {% load static %} 之后放置一个字符时,Django 网页才能正确显示
- python - 如何从 post 标记的句子中提取具有多种模式的块?
- google-cloud-platform - 在没有防火墙规则或允许的网络的情况下从 Macbook 连接到 Google Cloud SQL?
- node.js - mongodb可以发送没有循环的查询管道吗?
- c# - 如何在 Visual Studio 中创建和部署 Mono ASP.NET Web 项目?
- java - 如何在 Android Studio 中存储巨大的字符串数据?
- rest-assured - 如果在一段时间后没有收到响应,如何终止 Rest Assured 连接
- python - ImportError: libhdf5.so.101: cannot open shared object file: No such file or directory,
- windows - 我应该怎么做才能在 Git 上解决这个问题?