【发布时间】:2021-01-20 10:10:04
【问题描述】:
当组件被点击时,如何改变通过 .map() 渲染的只有一个 React 组件的样式。我正在尝试进行测验,如果单击正确答案,我希望组件背景更改为一种颜色,如果单击错误答案,则更改为另一种颜色。仅使用功能组件和钩子
const [correct, setCorrect] = useState(false);
const styles = {
correct: { backgroundColor: 'green' },
incorrect: { backgroundColor: 'red' }
};
const DUMMY_QUESTIONS = [
{
id: 1,
question: 'What is the Big O of merge sort?',
options: [
{ number: 1, answer: 'O(1)'},
{ number: 2, answer: 'O(log n)' },
{ number: 3, answer: 'O(n)' },
{ number: 4, answer: 'O(n log n)' }
],
answer: 'O(n log n)'
}
];
const handler = opt => {
if (opt === DUMMY_QUESTIONS[0].answer){
console.log(opt);
}
}
return (
<Fragment>
<div>
<Question question={DUMMY_QUESTIONS[0].question} />
</div>
<div>
{DUMMY_QUESTIONS[0].options.map(option =>
<AnswerOption
key={option.number}
id={option.number}
option={option.answer}
click={() => {if (option.answer === DUMMY_QUESTIONS[0].answer) setCorrect(true) }}
correct={correct} />
)}
</div>
</Fragment>
);
其他组件:
const AnswerOption = props => {
return (
<div
className={`answer-option ${props.correct && 'answer-option--correct'}`} onClick={() => {props.click(props.option)}} >
<p>{props.option}</p>
</div>
);
};
【问题讨论】:
-
请告诉我们实际行为是什么
标签: javascript css reactjs