首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React组件不会呈现,除非我刷新&重复呈现

React组件不会呈现,除非我刷新&重复呈现
EN

Stack Overflow用户
提问于 2022-11-20 11:35:14
回答 1查看 30关注 0票数 1

我一直在开发React/Redux应用程序和防火墙数据库

在我的应用程序中,当用户在输入字段中发送消息时发送简单的POST请求,并且用户输入的数据应该在相同的页面中呈现,而不需要刷新,但是我仍然需要刷新,即使我的useEffect中没有do!

,这是我的代码:

  • Post component

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        {posts.length > 0 &&         
          [...posts].map(({ id, data: { message, name, job, avatarUrl } }) => (
            <Post
              key={id}
              name={name}
              job={job}
              message={message}
              avatarUrl={avatarUrl}
            />
          ))}

但是,在刷新之后,我还会遇到一种奇怪的行为,即组件被呈现两次!尽管我的数据库只包含一个唯一的数据,每个messageThe react应用程序都会将其呈现两次(从数据库中的querySnapshot被添加到状态数组两次)。

  • useEffect

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useEffect(() => {
    querySnapshot();
     });
  }, []);

  • Database查询:

const q=查询(集合(db,"post"),其中(“type”、"==“、”post“)、orderBy("postDate”、"desc")、

  • Retrieving the data :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const [input, setInput] = useState("");
  const [posts, setPosts] = useState([]);
  const [nextId, setNextId] = useState("0");
  const addPost = (e) => {
    e.preventDefault();

    const docData = {
      name: "mo",
      job: "zoo",
      message: input,
      avatarUrl: "https://",
      postDate: firebase.firestore.FieldValue.serverTimestamp(),
      type: "post",
    };

    setDoc(doc(db, "posts", nextId.toString()), docData);
    setNextId(parseInt(nextId) + 1);
    setInput("");
  };

  async function querySnapshot() {
    const querySnapshot = await getDocs(q);
    console.log(querySnapshot.docs[0].data().message);
    setNextId(querySnapshot.docs.length)
    querySnapshot.docs.forEach((doc) => {
      let data = {
        id: doc.id,
        data: doc.data(),
      };
      if (data && !posts.includes(data.id)) {
        setPosts((current) => [...current, data]);
        console.log("psts now", posts);
      }
    });
  }

我尝试通过创建JavaScript来使用useState(new Set())集,但是重复的元素也出现了同样的问题。

我还试图在posts状态数组更改时更改useEffect的dep以呈现,直到我刷新时才呈现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-20 12:02:32

复制原因将由setPosts()引起,我已经按下面的方式更新了代码,尽量避免在循环中设置值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  async function querySnapshot() {
    const querySnapshot = await getDocs(q);
    setNextId(querySnapshot.docs.length)
    const data = querySnapshot.docs.map((doc)=>{
      return {id:doc.id, data: doc.data()}
    })

    setPosts((current) => [...current, data])
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74511309

复制
相关文章
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
在为您的应用程序选择通信协议时,有很多不同的选择。在本文中,我们将了解四种流行的解决方案:HTTP、WebSocket、gRPC和WebRTC。我们将通过调查其背后的技术、它的最佳用途及其优缺点来探索每个协议。
用户1418987
2023/10/16
3.2K0
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
在为您的应用程序选择通信协议时,有很多不同的选择。在本文中,我们将了解四种流行的解决方案:HTTP、WebSocket、gRPC和WebRTC。我们将通过调查其背后的技术、它的最佳用途及其优缺点来探索每个协议。
用户1418987
2023/10/16
1.8K0
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
在 .NET 应用程序中运行 JavaScript
前几天我在做一个副业,意识到我需要使用一些 JavaScript 功能。一想到要再次处理 Node.js 和 npm,我就完全放弃了,所以我决定研究一下在 .NET 应用程序中运行 JavaScript 的可能性。很疯狂吧?实际上,这出乎意料的简单。
独立观察员
2022/12/06
2.6K0
在 .NET 应用程序中运行 JavaScript
检查 Flutter 应用程序是否在 Web 上运行(书籍推荐)
您可以使用基础kIsWeb常量检查您的 Flutter 应用程序是否在 Web 浏览器上运行。
徐建国
2022/03/30
1.7K0
检查 Flutter 应用程序是否在 Web 上运行(书籍推荐)
gRPC: 如何在 gRPC 服务中添加 HTTP 基本验证?
本文将介绍如何在 gRPC 微服务中添加 API Auth。我们将介绍 Basic Auth,X-API-Key 两种 API Auth 模式。
尹东勋
2021/10/17
2.7K0
gRPC: 如何在 gRPC 服务中添加 HTTP 基本验证?
在WordPress 的文章或页面中运行PHP 代码
如果你在编辑器中输入PHP 代码,默认的话WordPress 不会为你执行这段代码的——只会文本方式输出。Tutsplus 上有一篇文章以插件的方式告知我们实现在WordPress 的文章或页面中运行PHP 代码的方法,下面介绍下。 原理小介绍 懂php 的都知道,PHP中载入其他PHP文件可以用include() 或者 require() 函数,因此为了实现在WordPress 的文章或页面中运行PHP 代码,我们可以将打算运行的代码写入一个额外的PHP 文件中,放在某个目录下,通过某种机制调用。英文原文
Jeff
2018/01/19
4.6K0
在WordPress 的文章或页面中运行PHP 代码
在bash中检测进程是否正在运行
比如我们启动了一个这样的进程python -m SimpleHTTPServer 8000,我们想检测这个进程是否存在,可以这样。
技术小黑屋
2018/09/04
3.6K0
在 CentOS 上使用 Jexus 托管运行 ZKEACMS
张善友
2017/05/22
2.3K0
在 CentOS 上使用 Jexus 托管运行 ZKEACMS
在CentOS上使用Jexus托管运行 ZKEACMS
ZKEACMS Core 是基于 .net core 开发的,可以在 windows, linux, mac 上跨平台运行,接下来我们来看看如何在 CentOS 上使用Jexus托管运行 ZKEACMS,通常我们在Linux部署ASP.NET Core应用,按照微软的官方文档,我们通常需要Nginx 搭配 Systemd (https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction), Nginx并没有接管Kestrel 进
张善友
2018/01/22
1.2K0
在CentOS上使用Jexus托管运行 ZKEACMS
gRPC在Spring Cloud中的应用
在微服务开发中,服务间的调用一般有两种方式:Feign、RestTemplate,但在实际使用过程中,尤其是Feign,存在各种限制及局限性,如:HTTP请求方式、返回类型等限制,有时会让你觉得那那都别扭。在微服务项目中,服务间的调用,是非常普遍频繁的,其性能也不是很理想。
xcbeyond
2020/04/01
5.4K0
gRPC在Spring Cloud中的应用
在Docker中使用nginx托管vue应用程序
首先,我们将使用Vue CLI生成入门Vue应用程序,我们将这个应用命名vue-nginx-docker
公众号: 云原生生态圈
2020/12/31
1.1K0
gRPC在C#中的未来属于grpc-dotnet
grpc-dotnet(Grpc.Net.Client[1]和Grpc.AspNetCore.Server[2] nuget 包)现在是.NET/C#中推荐的 gRPC 实现。最初的 gRPC C#实现(Grpc.Core nuget 包)将进入维护模式,不会得到任何新功能,只会收到重要的错误修复和安全修复。最终的计划是在未来的某个时候逐步完全淘汰 Grpc.Core。该公告描述了我们决定这样做的原因,并更详细地列出了该计划。
CNCF
2021/05/07
2.1K0
ChatGPT初体验|在 ChatGPT 中运行容器或Kubernetes?
The OpenAI API can be applied to virtually any task that involves understanding or generating natural language or code. We offer a spectrum of models with different levels of power suitable for different tasks, as well as the ability to fine-tune your own custom models. These models can be used for everything from content generation to semantic search and classification.
DevOps云学堂
2022/12/29
1.8K1
ChatGPT初体验|在 ChatGPT 中运行容器或Kubernetes?
2 - 哪里可以运行 JavaScript?
原文:https://dev.to/bhagatparwinder/where-can-i-run-javascript-995
前端黑板报
2022/04/19
1.4K0
2 - 哪里可以运行 JavaScript?
cloudbase-init用户是否可以禁用或删除
cloudbase-init是初始化程序,涉及很多功能,比如购买机器时、重装系统时、重置密码时指定的密码的生效,购买机器时、重装系统时指定的hostname的生效,购买机器时指定的userdata的生效等重要功能。
Windows技术交流
2021/09/28
4.7K0
java虚拟机可以运行的文件_虚拟机的网络模型有
类的实例(不包括局部变量与方法参数)都存储在Java堆 堆用于存储对象实例,比如通过 new创建的对象实例就保存在堆中,堆中的对象的由垃圾回收器负责回收。
全栈程序员站长
2022/09/29
8300
java虚拟机可以运行的文件_虚拟机的网络模型有
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。 gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。 该库包含2个相同的API:基于Protobuf的gRP
李海彬
2018/03/28
3.1K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。
石瞳禅
2018/09/18
1.7K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
讨论在 Linux Control Groups 中运行 Java 应用程序的暂停问题
本篇原文来自 LinkedIn 的 Zhenyun Zhuang,原文:Application Pauses When Running JVM Inside Linux Control Groups[1],在容器化的进程中,或多或少会给现有应用程序带来一些问题,这篇文章讲的是 LinkedIn 在使用 cgroups 构建容器化产品过程中,发现资源限制策略对 Java 应用程序性能会产生一些影响,文章深入分析问题根本原因,并给出解决方案。笔者看过后,觉得非常赞,因此翻译后献给大家,希望对大家有帮助。
涤生
2019/05/15
2.3K0
点击加载更多

相似问题

Appengine托管虚拟机部署失败

11

在HTTP1.1内核中是否可以使用gRPC?

45

是否可以在虚拟机上运行IPhone应用程序

40

在托管虚拟机的本地开发环境中运行web应用程序时出现appengine.NewContext错误

13

托管虚拟机是否可以滚动更新?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文