FirebaseExtended / FirebaseExtended/reactfire

useFirestoreCollection triggers a double render

未关闭
#484 4 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看
v5
主要语言
TypeScript
星标
3.6k
派生
403
平均合并
14 小时 53 分钟
30 天内合并 PR
5

描述

Hi,

Seems like `useFirestoreCollection` always triggers unnecessary render when fetching data (suspense is **on**). Similar behavior is also the case for `useUser`.
There's a chance I'm simply using the API wrong, so please advise if so :)

### Version info

**React:** 17.0.2

**Firebase:** 9.1.3

**ReactFire:** 4.2.0

### Test case

```javascript
const q = /* whatever query */;
const queryResults = useFirestoreCollection(q);
console.log(queryResults);

```

### Expected behavior

`console.log` is called once.

### Actual behavior

`console.log` is called twice.

Ultimately, what I'm trying to achieve is a code similar to the one below

```javascript
const queryResults = useFirestoreCollection(query);
return queryResults.data.docs.map((d) => /* render */);
```

that renders only once when the data is fetched (and then only when there're changes in the collection).

贡献指南

打开贡献指南

调研方向

首先使用 useFirestoreCollection 测试用例复现该行为,并将其与类似的 useUser 行为进行比较。检查这些 hook 的入口点,以确定为什么使用 Suspense 获取数据会导致 console.log 运行两次。完成的标准是:获取数据产生一次渲染,之后只有在 collection 发生变化时才会再次渲染。

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript, react
领域
database, frontend
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。