首页 > 解决方案 > orderByChild() 分派多次

问题描述

我正在尝试使用从 firebase 获取的数据制作 SectionList。我曾经使用以下代码创建 FlatList 并且效果很好。

firebase.database().ref(`/restaurantes/${currentUser.uid}/dishes`)
 .on('value', snapshot => {
      dispatch({ type: DISHES_FETCH_SUCCESS, payload: snapshot.val() })
  });

我得到一个包含所有结果的数组(调度只执行一次)我试图让数据排序,这样它就很容易管理。但是当我尝试以下代码时,每个结果都执行了 1 次调度,所以我的状态只得到最后一个结果。

firebase.database().ref(`/restaurantes/${currentUser.uid}/dishes`)
 .orderByChild("category")
 .on('child_added', snapshot => {
      dispatch({ type: DISHES_FETCH_SUCCESS, payload: snapshot.val() })
  });

我能做些什么?

标签: react-nativefirebase-realtime-databasereact-redux

解决方案


您的新代码正在侦听child_added,它会为每个单独的子节点触发。原始代码监听value,它会为所有组合结果触发一次。

要按类别顺序获取原始行为:

firebase.database().ref(`/restaurantes/${currentUser.uid}/dishes`)
 .orderByChild("category")
 .on('value', snapshot => {
      dispatch({ type: DISHES_FETCH_SUCCESS, payload: snapshot.val() })
  });

推荐阅读