javascript - 我怎样才能把它写成一个类组件?
问题描述
我在我的 App.js 中编写了一个函数来测试它是否运行,但想把它变成它自己的组件类。我尝试class ... ectends React.component
结束导出表达式,但它根本没有编译。
该函数应该是一个带有 3 个测试问题的测验的测试版本,以测试结构是否有效。我希望能够通过以下方式实现该功能:
<Route exact path="/play_quiz" component={play_quiz}></Route>
来自尚未完全实现的 index.js。
import './play_quiz.css';
export default function () {
const questions = [
{
questionText: 'testquestion1',
answerOptions: [
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'correct answer', isCorrect: true },
{ answerText: 'wrong answer', isCorrect: false },
],
},
{
questionText: 'testquestion2',
answerOptions: [
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'correct answer', isCorrect: true },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
],
},
{
questionText: 'testquestion3',
answerOptions: [
{ answerText: 'correct answer', isCorrect: true },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
],
},
];
const [currentQuestion, setCurrentQuestion] = useState(0);
const [showScore, setShowScore] = useState(false);
const [score, setScore] = useState(0);
const handleAnswerOptionClick = (isCorrect) => {
if (isCorrect) {
setScore(score + 1);
}
const nextQuestion = currentQuestion + 1;
if (nextQuestion < questions.length) {
setCurrentQuestion(nextQuestion);
} else {
setShowScore(true);
}
};
return (
<div className='quiz-window'>
{showScore ? (
<div className='score-section'>
korrekt beantwortet: {score} von {questions.length}
</div>
) : (
<>
<div className='question-section'>
<div className='question-count'>
<span>Frage {currentQuestion + 1}</span>/{questions.length}
</div>
<div className='question-text'>{questions[currentQuestion].questionText}</div>
</div>
<div className='answer-section'>
{questions[currentQuestion].answerOptions.map((answerOption) => (
<button onClick={() => handleAnswerOptionClick(answerOption.isCorrect)}>{answerOption.answerText}</button>
))}
</div>
</>
)}
</div>
);
}```
解决方案
我将假设该组件确实按预期工作,您只想将其转换为类组件,而不是使用 react-hooks。我实际上不知道这样做有什么好处,我只会为你做,所以这是我的解决方案:
import './play_quiz.css';
import React from "react"
export class function extends React.Component {
constructor() {
super();
this.state = {
questions: [
{
questionText: 'testquestion1',
answerOptions: [
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'correct answer', isCorrect: true },
{ answerText: 'wrong answer', isCorrect: false },
],
},
{
questionText: 'testquestion2',
answerOptions: [
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'correct answer', isCorrect: true },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
],
},
{
questionText: 'testquestion3',
answerOptions: [
{ answerText: 'correct answer', isCorrect: true },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
{ answerText: 'wrong answer', isCorrect: false },
],
},
],
currentQuestion: 0,
showScore: false,
score: 0
}
};
handleAnswerOptionClick = (isCorrect) => {
if (isCorrect) {
this.setState({score: score + 1});
}
const nextQuestion = currentQuestion + 1;
if (nextQuestion < questions.length) {
this.setState({
currentQuestion: nextQuestion
})
} else {
this.setState({
showScore: true
})
}
};
const {showScore, score, questions, currentQuestion} = this.state;
return (
<div className='quiz-window'>
{showScore ? (
<div className='score-section'>
korrekt beantwortet: {score} von {questions.length}
</div>
) : (
<>
<div className='question-section'>
<div className='question-count'>
<span>Frage {currentQuestion + 1}</span>/{questions.length}
</div>
<div className='question-text'>{questions[currentQuestion].questionText}</div>
</div>
<div className='answer-section'>
{questions[currentQuestion].answerOptions.map((answerOption) => (
<button onClick={() => this.handleAnswerOptionClick(answerOption.isCorrect)}>{answerOption.answerText}</button>
))}
</div>
</>
)}
</div>
);
}
推荐阅读
- c# - 如何在 Entity Framework 数据库中查询两个日期之间的记录,然后返回该信息以显示在屏幕上
- azure - 需要有关 Azure 中托管磁盘的帮助
- javascript - jqgrid过滤工具栏清除搜索设置错误的默认值
- django - Celery 和 django 不能按预期工作
- reactjs - 如何在 npm 脚本中使用自定义 env(.env.production.abc) 文件
- angular - 如何将运行时有效的功能从组件移动到服务
- python - 将等高线图和线图作为单独的子图返回 - Matplotlib
- javascript - 在 if 语句上使用 Promise
- c# - 调用 API 同步还是异步?
- visual-studio-code - Intellisense 在代码片段中不起作用 - VS Code