javascript - 通过函数进行条件渲染始终为 False
问题描述
我正在尝试迭代一系列选择,将它们显示为alert-secondary
; 然而,它会呈现一个选择,就alert-success
好像那个选择是正确的答案一样。正确答案基于一个名为的数组,answers
如下所示:
[
{id: 1, question_id: 1, correct_choice_id: 2}
]
所以我渲染它们:
{GetChoices(question._id).map(choice => (
<div key={choice._id}>
{ IsAnswer(question._id, choice._id) === true
?
<div className="alert alert-success mb-1">
{choice.content}
</div>
:
<div className="alert alert-secondary mb-1">
{choice.content}
</div>
}
</div>
))}
GetChoices
和IsAnswer
:
const GetChoices = (question_id) => {
let question_choices = []
choices.forEach((choice) => {
if (choice.question === question_id) question_choices.push(choice)
})
return question_choices
}
const IsAnswer = (question_id, choice_id) => {
answers.forEach((answer) => {
if (answer.question_id === question_id && answer.correct_choice_id === choice_id) {
console.log("yes")
return true
}
})
console.log("no")
return false
}
但是,它将所有选择呈现为alert-secondary
- 意味着它们都返回 False in IsAnswer
。
但正如你所看到的,我在console.log
那里放置了一个,结果是:
no
no
yes
所以理论上,第三个选择应该呈现为alert-success
,但事实并非如此。关于为什么它在我的条件渲染中一直说 False 的任何建议/解决方案?
非常感谢!
解决方案
大家不要介意,我是这样理解的:
const GetChoices = (question_id) => {
let question_choices = []
choices.forEach((choice) => {
if (choice.question === question_id) {
// Clone choice
let new_choice = choice
// Check if the choice is a correct answer
answers.forEach((answer) => {
if (answer.content === choice._id) {
new_choice.is_answer = true
}
})
question_choices.push(new_choice)
}
})
return question_choices
}
推荐阅读
- lua - 构建 NodeMCU 固件
- c# - C# EntityFramework 6.0 查询 Decimal > 0 没有结果
- java - [Easy|Power]Mock:让constructor.newInstance(...) 抛出异常?
- docker - 连接到部署到 kubernetes 的 jenkinsci/blueocean 映像上的 docker 守护程序时权限被拒绝
- php - PHP array_push() 在推送之前将对象错误地推送到另一个数组中
- docker - 命令“/bin/sh -c apt-get install dnsutils”返回非零代码:1
- javascript - 如何更改“" 元素动态使用 Javascript?
- sails.js - 如何将 Sails 从 1.1.0 升级到 1.2.2
- image - 如何显示产品的第二张图片?PrestaShop 1.7.5.1
- python - TypeError:无法使用灵活类型 Keras 执行 reduce