【问题标题】:how to validate answers for quiz app, values which is fetched from json in reactjs?如何验证测验应用程序的答案,从 reactjs 中的 json 获取的值?
【发布时间】:2019-12-09 17:47:35
【问题描述】:

我正在开发一个 ReactJs 测验应用程序,我在验证 json 中的答案时遇到问题。

我使用 React 版本 16.8 使用状态组件完成了这个测验应用程序,并使用 map 函数获取了 json 数据并存储在状态中。我已经完成了视图部分,现在我开始验证测验,我在这部分中苦苦挣扎。

这里是完整代码:https://codesandbox.io/s/mystifying-firefly-2d2x5 还要添加我的 json 链接:http://myjson.com/kpop9

我希望答案应该得到验证,如果用户在尝试所有问题之前点击提交按钮,它应该显示您有未回答的问题,如果用户在尝试所有测验后点击提交,它应该显示用户获得的总分.

【问题讨论】:

  • 您知道您正在以 JSON 格式发送响应,任何进行测试的人都可以看到正确的响应...
  • 我真的无法为您编写解决方案,因为您自己编写对您来说是最好的——这是最好的学习方式。我想到的第一个解决方案是存储当前问题(正如您已经在 App 组件的状态下所做的那样 - 我可能不推荐)。然后,单击submit 按钮后,从表单中获取当前选定的项目,遍历您的问题 JSON,按 ID 查找当前问题并比较答案。如果没有从表单中选择任何内容,您也可以采用这种方式 - 显示模态/警报/toast 以警告用户
  • 你能用一些代码解释一下吗?

标签: reactjs


【解决方案1】:

从上面回复您的评论,这里是您的沙盒代码稍作编辑。您可以随时提交答案,这些是您应该看到的警报

  • 当您不选择答案时:提示消息 No nulls
  • 回答错误时:提示消息错误
  • 当答案正确时:提示消息正确

Here is your edited sandbox

提供的解决方案只是示例,不应被视为完美的解决方案,它只是为了让您了解它是如何工作的(您可能仍想实施该位,在提交最后一个答案后,得分计算 - 为此您可能需要存储分数)

说明:

  • 在本例中,我决定在 index.js 中添加 selected_answer 变量,该变量将当前选定的答案存储在表单上。
  • 接下来,我在index.js 中创建了setAnswer 函数,该函数接受选定的答案作为参数并将selected_answer 的状态设置为传入的任何值。欢迎您对传递的值实施尽可能多的检查随心所欲
  • 然后将setAnswer 函数传递给您的Answer 组件,因此当值更改时,可以将其保存在index.js 状态中
  • Result 组件接收index.js 状态作为prop。这允许它访问当前问题、所有问题的数组和当前选择的值
  • Result 组件内部有一个validateAnswer 函数,当点击submit 按钮时会触发该函数。在该函数中,我使用props.current_question(这是问题的索引)从您的 JSON 文件中提取整个问题对象。接下来,我从先前创建的question 对象中过滤答案数组,然后提取is_right 设置为1 的答案。最后,我检查props.selected_answer 是否为空,如果是则显示一条消息。如果不是,我检查它是否等于先前提取的正确答案对象的值。瞧!

如前所述,这不是最好的解决方案,但它可以在您的代码之上运行而无需进行太多更改。如果您有任何其他问题,请告诉我,但希望对您有所帮助。

【讨论】:

  • 感谢兄弟的工作,但我需要用户的总分。一旦用户尝试了所有问题,提交按钮应该会起作用,假设如果他在尝试所有问题之前点击提交,它应该会说你有类似的未回答的问题。
  • 在这种情况下,您可以跟踪所有选定的答案(可能在数组中?),并在单击 submit 按钮时检查数组的长度是否等于问题数组。如果相同,重复问题,检查答案,保留分数并显示。如果不一样,显示警告/提醒(你也可以显示哪些问题没有回答)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2019-05-03
  • 1970-01-01
  • 2013-01-14
相关资源
最近更新 更多