react native 新手,我正在获得控制台中打印的数据,但没有呈现列表项?test是我的useState中的数据.

以下是我的代码:

export default function HomeScreen({ navigation }) {
  const [loading, setLoading] = useState(true);
  const [test, setTest] = useState([]);

  let loadData = async () => {
    const q = query(collection(FIREBASE_FIRESTORE, "test"));
    const qSnap = await getDocs(q);
    let testData = [];
    qSnap.forEach((doc) => {
      let documentData = doc.data();
      documentData.id = doc.id;
      test.push(documentData);
    });
    setTest(testData);
    setLoading(false);
  };

  if (loading) {
    loadData();
    return <ActivityIndicator style={style.indicator} />;
  } else {
    return (
      <View style={style.container}>
        <FlatList
          alwaysBounceVertical={true}
          keyExtractor={(item) => item.id}
          data={test}
          renderItem={({ item }) => (
            <View style={style.cell}>
              <Text style={style.text}>{item.title}</Text>
            </View>
          )}
        />
      </View>
    );
  }
}

推荐答案

在组件主体中调用loadData()不正确.您应该使用useEffect来获取数据.此外,你创造了testData,但你只会在你的forEach中推到test.这应该是可行的:

export default function HomeScreen({ navigation }) {
  const [loading, setLoading] = useState(true);
  const [test, setTest] = useState([]);

  useEffect(() => {
    let loadData = async () => {
      const q = query(collection(FIREBASE_FIRESTORE, "test"));
      const qSnap = await getDocs(q);
      let testData = [];
      qSnap.forEach((doc) => {
        let documentData = doc.data();
        documentData.id = doc.id;
        // test.push(documentData);
        testData.push(documentData);
      });
      setTest(testData);
      setLoading(false);
    };
    loadData();
  }, []);

  if (loading) {
    return <ActivityIndicator style={style.indicator} />;
  } else {
    return (
      <View style={style.container}>
        <FlatList
          alwaysBounceVertical={true}
          keyExtractor={(item) => item.id}
          data={test}
          renderItem={({ item }) => (
            <View style={style.cell}>
              <Text style={style.text}>{item.title}</Text>
            </View>
          )}
        />
      </View>
    );
  }
}

Reactjs相关问答推荐

有没有办法让两个状态在两次精准渲染中更新?

TypeError:SearchProduct.get()获得了意外的关键字参数查询'

如何在单击行中的图标时避免选中ionic 复选框?

如何使我的代码可以接受我想要的每一个链接

如何使ionic 面包屑在州政府条件下可点击?

使用experial_useFormState将参数传递给服务器操作

设置自定义形状的纹理

拖放 - 将排序保存到数组字段

如何使用 redux 和 react-plotly.js

我正在try 将一组加载程序函数发送到我的路由,它抛出一个错误 Handler is not a funtion in a reactJs application

React Native Realm 应用程序在发布构建后崩溃

动态添加或删除文本输入字段并将值设置为 React JS 中主要状态的数组

react 事件顺序

如何使图标适合 react-bootstrap 中的行元素

在 Remix 中使用 chartjs 和 react-chartjs-2 会出现错误react-chartjs-2未在您的 node_modules 中找到

如何使用 cypress 获取 MUI TextField 的输入值?

需要帮助在 document.queryselector 的 nextjs 页面上插入 useEffect 状态

如何从 extrareducer redux 更改对象中元素的值

MUI 卡组件上的文本未正确对齐

你如何使用 refs 访问 React 中映射子项的值?