reactjs - ReactJS 中的循环组件
问题描述
我正在尝试在 ReactJS 中做一个循环。
我有一个具有以下结构的数据库:
课程(收藏)-> 测试课程(doc)-> 问题(收藏)
在问题集合中,每个问题都有一个文档,其中包含一个说明问题类型的字段。
我希望我的代码遍历每个问题,找到问题类型,然后根据匹配的内容输出组件。
目前,它根据类型输出最新的文档和组件,但我不太确定如何循环它。
代码
import './App.css';
import firebaseConfig from './firebase/index'
import { Component } from 'react';
import TrueOrFalse from './components/TrueOrFalse/TrueOrFalse'
import firebase from 'firebase/app'
import MultipleChoice from './components/MultipleChoice/MultipleChoice'
class App extends Component {
state = {
questionType: null
}
componentDidMount() {
let db = firebase.firestore()
db.collection('courses').doc('testcourse1').collection('questions').get().then(snapshot =>{
const questionTypes = []
snapshot.docs.forEach(doc => {
const data = doc.data()
this.setState (data)
questionTypes.push(data)
console.log(this.state)
})
})
}
render(){
let question = null;
if (this.state.questionType === "TrueOrFalse")
question = <TrueOrFalse/>
else if (this.state.questionType === "MultipleChoice")
question = <MultipleChoice/>
return (
<div>
{question}
</div>
)
}
}
export default App
解决方案
它只显示最后一个的原因是您在循环的每次迭代中调用 this.setState(data) 。因此,它会覆盖每个先前的值。相反,如果您希望所有问题类型都处于该状态,则需要将它们全部保存在该状态中。删除当前的 setState(data) 调用并像这样放置一个新的,
snapshot.docs.forEach(doc => {
...
})
this.setState(questionTypes);
这会将它们全部保存到组件状态中。接下来,您需要遍历 this.state.questionTypes(我将 questionType 重命名为 questionTypes)。例如你可以这样做,
render() {
return (
<div>
{this.state.questionTypes.map(questionType => {
if (questionType === 'TrueOfFalse') {
return <TrueOfFalse />
} else if (questionType === 'MultipleChoice') {
return <MultipleChoice />
}
// you're missing some cases, so I'm just returning null
return null;
}}
</div>
)
}
推荐阅读
- c# - C# Linq - 对已经分组的数据进行分组
- javascript - 如何在打字稿中访问geoJson坐标数组?
- vue.js - 路由器视图中的路由器视图
- c# - 使用 Firebase Auth 对其进行身份验证后,如何在最终用户 c# 应用程序中安全地使用 Google Speech API?
- python - 用 dict 值替换列表值中的列表
- c# - 无法使用本机 .SO 创建 Java 库绑定
- android - 如何在不重复的情况下更改 MaterialButton 的样式?
- angular - 如何使用 Angular Material 更改输入自动完成的背景颜色?
- angular - Msal登录弹窗的定位
- javascript - 使用带有 HREF 滚动或修改按钮链接的按钮的解决方案