首页 > 解决方案 > 通过函数进行条件渲染始终为 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>
 ))}

GetChoicesIsAnswer

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 的任何建议/解决方案?

非常感谢!

标签: javascriptreactjs

解决方案


大家不要介意,我是这样理解的:

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
}

推荐阅读