javascript - 为什么我的数组项被添加到顶部,而滚动条仍保留在顶部?

标签 javascript reactjs

我正在创建一个聊天应用程序,我想在单击顶部的按钮时加载更多消息。它工作得很好,但是当我单击“加载更多”按钮时,项目会添加到顶部,并且滚动位置保持在顶部。但是我想加载它们,并且滚动位置必须保留在最后一个最上面的项目。现在我的代码如下:

Chat.js返回方法

    return (
        <div className="page">
            <div className="page__title">Chat</div>

            <article className="chat">
                {!!conversations.length && (
                    <div className="chat__conversations">
                        <ul className="chat__left list">
                            {conversations.map((_conversation, index) => (
                                <li key={index} className="list__item">
                                    <button className="list__link"
                                            onClick={() => setCurrentConversation(_conversation)}>
                                        {getRecipient(_conversation).name}
                                    </button>
                                </li>
                            ))}
                        </ul>
                    </div>
                )}
                {
                    conversation && !!messages.length && (
                        <div className="chat__right">
                            <Messages messages={messages} isOwnMessage={isOwnMessage} hasMore={hasMore}
                                      getMessages={getMessages}/>
                            <form className="form" onSubmit={sendMessage}>
                                <input className="form__input message__input"
                                       placeholder="Tryk Enter for at sende en besked"
                                       value={message}
                                       onChange={e => setMessage(e.target.value)}/>
                            </form>
                        </div>
                    )
                }


            </article>
        </div>
    )

消息组件

    return (
        <ScrollToBottom className="chat__messages">
            <button className="btn"
                    disabled={!hasMore}
                    onClick={() => getMessages()}>{hasMore ? 'Hent flere beskeder' : 'Ikke flere beskeder'}</button>
            {messages.map((_message, index) => (
                <div key={index}>
                    {isOwnMessage(_message) ? (
                        <div className="message">
                            <div className="message__user">
                                <p className="message__user-name">{_message.user.name}</p>
                                <p className="message__user-date">{moment(_message.createdAt).fromNow()}</p>
                            </div>
                            <span className="message__text">{_message.text}</span>
                        </div>
                    ) : (
                        <div className="message">
                            <span className="message__text">{_message.text}</span>
                            <div className="message__user">
                                <p className="message__user-name">{_message.user.name}</p>
                                <p className="message__user-date">{moment(_message.createdAt).fromNow()}</p>
                            </div>
                        </div>
                    )}
                </div>
            ))}
        </ScrollToBottom>

    )

最佳答案

听起来您想使用 scrollTo方法。

关于javascript - 为什么我的数组项被添加到顶部,而滚动条仍保留在顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60348286/

相关文章:

用于可停靠面板/选项卡的 Javascript 库?

reactjs - 如何为GLTF react-three-fiber分配 Material

javascript - 在reactjs中调用方法内的方法

javascript - Reactjs 在类外但在同一个文件中访问类方法

javascript - 如何关注导入的 React 组件中的某个元素?

javascript - 使字体系列 css 属性单引号

javascript - 模拟 enzyme 中的焦点不会改变 document.activeElement

javascript - 从 iframe 本身内的另一个页面延长 iframe

javascript - `req` 和 `res` 来自哪里?

node.js - 获取 "blocked by CORS policy: No ' Access-Control-Allow-Origin' header 存在于请求的资源上。”使用 Axios 的 MERN 堆栈