首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ReactJS钩子在云Firestore中渲染数据

使用ReactJS钩子在云Firestore中渲染数据
EN

Stack Overflow用户
提问于 2020-11-23 17:30:48
回答 2查看 86关注 0票数 0

如何使用ReactJS原生功能组件呈现从Cloud Firestore检索到的数据?

我想做这样的事情:

代码语言:javascript
复制
    const result=[]

    db.collection("collection").where("parameter", "==", "value")
    .get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            result.push(doc.data());
        });

    export default function foo(){
     return(
       <View>
        {result.map((item) =>
          <CustomComponent data=item />
        )}
       </View>
     )
    }

显然,代码无法工作,因为渲染发生在promise解析之前。我在网上读了很多书。一种可能的解决方案是更新ComponentDidMount中的状态,其中发生对db的请求。

所以我的问题是,我怎样才能用一个功能组件做到这一点呢?这是唯一的最好的解决方案吗?我想要从Firestore检索的数据和我想要显示的数据不会变化得那么快。

EN

回答 2

Stack Overflow用户

发布于 2020-11-23 17:46:56

她的是一个代码片段,希望它能为你工作...

代码语言:javascript
复制
const useData = () => {
  const [list, setList] = useState([]);
  const [loading, setLoading] = useState(false);

  const getData = () => {
    const data = [];
    db.collection('collection')
      .where('parameter', '==', 'value')
      .then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
          data.push(doc.data());
        });
        setList(data);
      });
  };

  return [loading, list, getData];
};

export default function App() {
  const [loading, list, getData] = useData();

  useEffect(() => {
    getData();
  }, []);

  return (
    <View style={styles.container}>
      {loading ? (
        <ActivityIndicator />
      ) : (
        {
          // renderList
        }
      )}
    </View>
  );
}
票数 0
EN

Stack Overflow用户

发布于 2020-11-24 20:30:11

这可能是因为您正在尝试呈现一个数据数组。我建议看看这个很好的例子here。我添加了一些ReactJS映射的示例,您可能会发现它们对您有帮助:

代码语言:javascript
复制
render() {
    return (<div>
    {this.state.people.map((person, index) => (
        <p key={index}>Hello, {person.name} from {person.country}!</p>
    ))}
    </div>);
}
代码语言:javascript
复制
this.state.data.map(function(item, i){
  console.log('test');
  return <li key={i}>Test</li>
})

您可能会发现这些教程和用户指南很有帮助:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64965756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档