使用 React 发送消息时聊天滚动到底部

信息开发

当我发送文本时,我希望聊天窗口向下滚动。

实际上发送的消息不会触发滚动,因此它们是隐藏的。

这是一个示例(我使用的是MS Fluent UI for React 库的聊天组件

我找到了这篇文章,但我无法整合它(不知道在哪里声明了 endMessage )在我的情况下它的价值是undefined.

import React from "react";
import { Avatar, Chat, Divider, Input } from "@fluentui/react-northstar";
import { AcceptIcon } from "@fluentui/react-icons-northstar";

const janeAvatar = {
  image: "public/images/avatar/small/ade.jpg",
  status: {
    color: "green",
    icon: <AcceptIcon />
  }
};

const ChatExample = () => {
  const items = [
    {
      message: (
        <Chat.Message
          content="Hello"
          author="John Doe"
          timestamp="Yesterday, 10:15 PM"
          mine
        />
      ),
      contentPosition: "end",
      attached: "top",
      key: "message-id-1"
    },
    {
      message: (
        <Chat.Message
          content="I'm back!"
          author="John Doe"
          timestamp="Yesterday, 10:15 PM"
          mine
        />
      ),
      contentPosition: "end",
      attached: true,
      key: "message-id-2"
    },
    {
      message: (
        <Chat.Message
          content={{
            content: (
              <div>
                What do you think about <a href="#">www.goodFood.com</a>?
              </div>
            )
          }}
          author="John Doe"
          timestamp="Yesterday, 10:15 PM"
          mine
        />
      ),
      contentPosition: "end",
      attached: "bottom",
      key: "message-id-3"
    },
    {
      gutter: <Avatar {...janeAvatar} />,
      message: (
        <Chat.Message
          content="Hi"
          author="Jane Doe"
          timestamp="Yesterday, 10:15 PM"
        />
      ),
      attached: "top",
      key: "message-id-4"
    },
    {
      gutter: <Avatar {...janeAvatar} />,
      message: (
        <Chat.Message
          content="Looks good!"
          author="Jane Doe"
          timestamp="Yesterday, 10:15 PM"
        />
      ),
      attached: true,
      key: "message-id-5"
    },
    {
      gutter: <Avatar {...janeAvatar} />,
      message: (
        <Chat.Message
          content={
            <div>
              I also like <a href="#">www.goodFood2.com</a>.
            </div>
          }
          author="Jane Doe"
          timestamp="Yesterday, 10:15 PM"
        />
      ),
      attached: "bottom",
      key: "message-id-6"
    },
    {
      message: (
        <Chat.Message
          content="Would you like to grab lunch there?"
          author="John Doe"
          timestamp="Yesterday, 10:16 PM"
          mine
        />
      ),
      contentPosition: "end",
      key: "message-id-7"
    },
    {
      gutter: <Avatar {...janeAvatar} />,
      message: (
        <Chat.Message
          content="Sure! Let's try it."
          author="Jane Doe"
          timestamp="Yesterday, 10:15 PM"
        />
      ),
      key: "message-id-8"
    },
    {
      children: <Divider content="Today" color="brand" important />,
      key: "message-id-9"
    },
    {
      message: (
        <Chat.Message
          content="Ok, let's go."
          author="John Doe"
          timestamp="Today, 11:15 PM"
          mine
        />
      ),
      contentPosition: "end",
      key: "message-id-10"
    }
  ];
  const [inputValue, setInputValue] = React.useState("");
  const [itemsChat, setItemsChat] = React.useState(items);
  const chatStyle = {
    height: 500,
    overflow: "scroll"
  };
  const handleKeyDown = event => {
    if (event.key == "Enter") {
      console.log(event);
      let elm = {
        message: (
          <Chat.Message
            content={inputValue}
            author="John Doe"
            timestamp="Yesterday, 10:15 PM"
            mine
          />
        ),
        contentPosition: "end",
        attached: "top",
        key: "message-id-1"
      };
      setItemsChat(itemsChat => [...itemsChat, elm]);
      setInputValue("");
    }
  };
  return (
    <div>
      <Chat style={chatStyle} items={itemsChat} />

      <Input
        fluid
        placeholder="Inverted color input..."
        value={inputValue}
        onKeyDown={event => handleKeyDown(event)}
        onChange={event => setInputValue(event.target.value)}
      />
    </div>
  );
};

export default ChatExample;
粤港澳大湾区

您可以简单地使用具有itemsChatas 依赖项的效果只需抓住聊天ul元素并滚动到底部。

useEffect(() => {
    document.querySelector('.ui-chat').scrollTop = document.querySelector('.ui-chat').scrollHeight
  }, [itemsChat])

您的代码的工作副本在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Bootstrap聊天小部件滚动到底部

将div onload滚动到底部,以及在使用新数据更新时滚动-angularjs

使用 GET 变量从数据库滚动到底部时加载更多 - PHP/Mysqli

使用Xcode 9.3构建时Tableview不会滚动到底部

使用动态单元格高度时,将表格视图滚动到底部

在 swift 中使用函数 viewDidLoad 中的代码时,滚动到底部自动不起作用

React Tiny Virtual List - 滚动到底部?

React Native ScrollView不会滚动到底部并反弹

React Native ScrollView不滚动到底部

Js div 在 React 组件中滚动到底部

使用React.js引用无法滚动到div的底部

使用React js检测用户何时滚动到div的底部

使用香草Javascript / CSS自动滚动到底部-Polymer

如何使用jQuery向下滚动到底部子div

ScrollViewer不能使用Avalonedit滚动到底部

Python-单击以使用Selenium滚动到底部

如何使用 JS 将页面滚动到底部?

在使用Nuxt.js的聊天对话中,如何在页面加载时向下滚动到特定div的底部?

使用React Hooks滚动到页面加载时的元素

聊天框滚动到底部?

聊天框,自动滚动到底部

在Firefox中使用2滚动检测滚动到底部

react-window如何知道它是否滚动到底部

React Native教程中的ListView无法滚动到底部(Android)

发送太多消息后使用React和Socket.io挂起的聊天应用程序

将表格滚动到底部后,使用新数据更新UITableView的数据源

使用cdk-virtual-scroll(角度8)滚动到底部

UITableViewController:使用动态行高滚动到底部会在错误的位置启动动画

如何在红宝石中使用硒向下滚动到底部