如何在 React 中更改消息的可见状态?

编程入门 行业动态 更新时间:2024-10-03 14:18:23

如何在 React 中更改消息的可见<a href=https://www.elefans.com/category/jswz/34/1771386.html style=状态?"/>

如何在 React 中更改消息的可见状态?

我有一个用React的聊天程序,但是我不知道如何实现消息的阅读状态。

后端:

socket.on("read_message", async({message_id})=>{
    const updated_message = await Message.findByIdAndUpdate(message_id, {is_read: true}, {new: true});
    if(updated_message){
      socket.emit("road_message", {
        status: 'success'
      })
    }
  })

messageContainer
组件(正面):

const MessageContainer = ({ messages }) => {
  const messageRef = useRef(null);
  useEffect(() => {
    const domNode = messageRef.current;
    if (domNode) {
      domNode.scrollTop = domNode.scrollHeight;
    }
  }, [messages.length]);
  return (
    <div
      id="messages"
      className="scroll-smooth flex flex-col h-full space-y-4 p-3 overflow-y-auto scrollbar-thumb-blue scrollbar-thumb-rounded scrollbar-track-purple scrollbar-thin scrolling-touch"
      ref={messageRef}
    >
      {messages.length > 0 ? (
        <>
          {messages.map((message, index) => (
            <Message message={message} key={index} />
          ))}
        </>
      ) : (
        <NoMessage />
      )}
    </div>
  );
};

export default MessageContainer;

消息组件:


const Message = ({ message }) => {
  const isMe = window.localStorage.getItem('user_id') === message.from;
  useEffect(()=>{
    const readMessage = ()=>{
      if (!isMe && message.is_read === false) {
        socket.emit('read_message', {
          message_id: message._id,
        });
      }
    }
    readMessage();
    socket.on("road_message", ({status})=>{
      if(status === 'success') {}
    })
  },[isMe, message])
  
  return isMe ? (
    <OutcomingMessage message={message} />
  ) : (
    <IncomingMessage message={message} />
  );
};

export default React.memo(Message);

不知道怎么实现。请帮助我!

回答如下:

首先,你的

Message
部分有错别字。
socket.on("road_message"
应该是
socket.on("read_message"
.

然后,要显示阅读状态,在 UI 上,您可以设置一个状态,例如在

isRead
中调用
Message
,并将其传递给
OutcomingMessage

import { useState, useEffect } from "react";

const Message = ({ message }) => {
  const isMe = window.localStorage.getItem("user_id") === message.from;
  const [isRead, setIsRead] = useState(false);
  useEffect(() => {
    const readMessage = () => {
      if (!isMe && message.is_read === false) {
        socket.emit("read_message", {
          message_id: message._id,
        });
      }
    };
    readMessage();
    socket.on("read_message", ({ status }) => {
      if (status === "success") {
        setIsRead(true);
      }
    });
  }, [isMe, message]);

  return isMe ? (
    <OutcomingMessage message={message} isRead={isRead} />
  ) : (
    <IncomingMessage message={message} />
  );
};

export default React.memo(Message);

OutcomingMessage
,抓住那个布尔值相应地显示一个指标,像这样:

const OutcomingMessage = ({ message, isRead }) => {
  return (
    <>
      {isRead && <p>Message read</p>} <div>{message.whatever}</div>
    </>
  );
};

更多推荐

如何在 React 中更改消息的可见状态?

本文发布于:2024-05-30 13:49:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770563.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:状态   消息   如何在   React

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!