首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Gun.js复制ReactJs中的消息

为什么Gun.js复制ReactJs中的消息
EN

Stack Overflow用户
提问于 2022-06-19 12:36:07
回答 1查看 85关注 0票数 3

我在react中实现gun.js,在每次呈现和每次更新上都重复application.But消息。有人能帮我找出我的代码出了什么问题吗。

这是我的密码。

代码语言:javascript
复制
import Gun from "gun/gun";
import { IGunChain, IGunInstance } from "gun/types";

class GunService {
public gun: IGunInstance<any> | undefined;
public messageListener:
| IGunChain<any, IGunInstance<any>, IGunInstance<any>, "messages">
| undefined;

  constructor() {
     this.gun = Gun("http://localhost:4000" + "/gun");
     this.messageListener = this.gun.get("messages");
   }

   public sendMessage(message: any) {
   this.messageListener?.set(message);
   }
 }
export const gunServices = new GunService();

然后在我的组件中:获取每个新更新的消息

代码语言:javascript
复制
   useEffect(() => {
     gunServices.messageListener?.map().on((message) => {
     setMessages((prevMessage) => [...prevMessage, message]);
   });
  }, []);

发送消息功能

代码语言:javascript
复制
      const onSendMessage = () => {

       const message = {
       senderUsername: "John Doe",
       senderId: "Doe---id",
       receiverUsername: "John Doe",
       receiverId: "zizou_id",
       message: messageValue,
       date: Date.now().toLocaleString(),
       time: Date.now().toLocaleString(),
    };

     gunServices.sendMessage(message);
     setMessageValue("");
  };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-31 15:53:01

我对此的简单修正是添加useRef()

代码语言:javascript
复制
   import { useState, useRef, useEffect } from "react"; 

   useEffect(() => {
     if (loaded.current !== false) return; // Added

     gunServices.messageListener?.map().once().on((message) => {
     setMessages((prevMessage) => [...prevMessage, message]);

     loaded.current = true; // Added
   });
  }, []);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72676941

复制
相关文章

相似问题

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