【发布时间】:2021-04-01 04:42:39
【问题描述】:
我仍在学习 React,我正在尝试制作一个“设计评论应用”,用户可以在其中注册为客户或设计师并相互互动。 我制作了身份验证系统,并确保每个用户在注册时都会在 firebase 数据库中获得一些属性。 因此,在我的数据库中,我有一个“用户/”路径,每个用户都由 uid 保存。
现在,如果您是客户或设计师,我可以呈现不同的仪表板。 在我的客户仪表板中,我只想呈现设计师列表(然后单击他们转到他们的项目)。 但是,我在尝试让这些东西正常工作时遇到了很多问题!
在下面的代码中,我试图从数据库中获取用户并将他们的 uid 添加到数组中。 稍后我想使用这个数组并使用这些 uid 呈现用户。
import firebase from "firebase/app";
import "firebase/database";
export default function CustomerContent() {
const[designers, setDesigners] = useState([]);
function printUsers (){
var users = firebase.database().ref('/users/');
users.on('value', (snapshot)=>{
snapshot.forEach((user)=>{
console.log(user.key)
firebase.database().ref('/users/'+user.key).on('value', (snapshot)=>{
var role = snapshot.val().role
console.log(role)
if(role === 'designer'){
const newDesigners = [...designers, user.key];
setDesigners(newDesigners);
}
})
})
})
}
useEffect(() => {
printUsers();
console.log(designers);
}, [])
return (
<div>
designer list
</div>
)
}
现在这段代码的问题在于:
- 看起来它在加载页面时运行了两次 printUsers 函数
- 数组是空的,但是,如果我将函数链接到一个按钮(只是为了尝试),它似乎只向数组添加了 1 个 uid,并且总是相同的(我不知道发生了什么)。
ps。 console.log(user.key) 和 console.log(role) 打印正确的用户角色组合
【问题讨论】:
-
[...designers, user.key]- 这一行将包括所有设计者和一个数组的单个 id -> [d1, d2, d3, key]。这是你所期待的吗? -
@SarunUK 实际上我认为它只会包含 id,因为他以空数组开头。
-
@SaruUK 我真的很想展示设计师。该行应该使设计师 ids + 当前用户 id 的数组(如果它是设计师),因此当它遍历用户时,它将生成一个包含所有设计师 id 的数组
标签: javascript reactjs firebase firebase-realtime-database