Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React仅呈现从firebase下载的列表中的一项_Reactjs_Typescript_Firebase_Firebase Realtime Database - Fatal编程技术网

Reactjs React仅呈现从firebase下载的列表中的一项

Reactjs React仅呈现从firebase下载的列表中的一项,reactjs,typescript,firebase,firebase-realtime-database,Reactjs,Typescript,Firebase,Firebase Realtime Database,我正试图显示一个用户列表,我从Firebase实时数据库获得。在日志上,我把它们都记下来了!但是在屏幕上,只有第一个出现。如果我作为依赖项users放置,我会在日志上得到一个无限循环,但屏幕上仍然有一个项目使用回调也没有帮助。如果我在屏幕上填写输入,从而触发重新渲染,那么我将获得所有用户。为什么一开始就不能把他们都吸引过来?可能是打字脚本吗 谢谢 。。。 const[users,setUsers]=useState([]); const[usersRef]=useState(firebase.d

我正试图显示一个用户列表,我从Firebase实时数据库获得。在日志上,我把它们都记下来了!但是在屏幕上,只有第一个出现。如果我作为依赖项
users
放置,我会在日志上得到一个无限循环,但屏幕上仍然有一个项目<代码>使用回调也没有帮助。如果我在屏幕上填写输入,从而触发重新渲染,那么我将获得所有用户。为什么一开始就不能把他们都吸引过来?可能是打字脚本吗

谢谢

。。。
const[users,setUsers]=useState([]);
const[usersRef]=useState(firebase.database().ref().child('users');
...
const getUsers:()=>void=useCallback(()=>{
常量加载用户:任意[]=[]
usersRef.on('child_added',(snap:any)=>{
loadedUsers.push(snap.val())
设置用户(加载用户)
log('loadedUsers',loadedUsers);
})
},[setUsers,usersRef])
useffect(()=>{
getUsers();
return()=>usersRef.off()
},[usersRef,getUsers])
const displayUsers=(用户:任意)=>{
console.log(用户);
返回users.length>0&&users.map((用户:任意)=>
  • {user.email}
  • ) } ...
      {displayUsers(用户)}
    所以,多亏了@Renaud Tarnec,firebase侦听器出现了问题。我不得不听
    value
    change而不是
    child\u added
    。以下是新版本。我真的不喜欢
    displayUsers
    原来的方式,但它确实有效。如果有任何建议,我很乐意看到

    再次感谢

    const getUsers:()=>void=useCallback(()=>{
    常量加载用户:任意[]=[]
    usersRef.on('value',(snap:any)=>{
    loadedUsers.push(snap.val())
    设置用户(加载用户)
    log('loadedUsers',loadedUsers);
    })
    },[setUsers,usersRef])
    ...
    const displayUsers=(用户:任意)=>{
    console.log(用户);
    返回users.length>0&&users.map((userObj:any)=>{
    常量用户=[]
    for(userObj中的常量键){
    users.push(userObj[key])
    }
    返回users.map((用户:任意)=>
    
  • {user.email}
  • ) } ) }
    如果我正确理解了您的问题,这是因为您使用了添加的
    子事件而不是
    值。请参见以下内容中两者之间的差异:

    价值事件

    此事件将触发一次,初始数据存储在此位置 位置,然后在每次数据更改时再次触发。这个 传递到回调的DataSnapshot将用于 调用了()上的
    on

    子项添加事件

    此时,每个初始子级将触发一次此事件 位置,并将在每次创建新的子对象时再次触发 补充。传递到回调中的DataSnapshot将反映数据 对于相关的孩子


    总之,通过
    value
    事件,您可以获得此位置的所有数据,而通过添加
    child\u
    事件,您可以获得孩子的数据。

    谢谢您的时间。我将在上面设置完成的代码。我会在文件里看得更清楚!