gpt4 book ai didi

javascript - 实现 React 的 UseEffect 只监听增量/减量

转载 作者:行者123 更新时间:2023-12-04 07:16:56 26 4
gpt4 key购买 nike

我已经构建了一个聊天应用程序,我正在使用 useEffect听听messages.length ,以便在收到新消息时向下滚动到底部 - incrementmessages.length .
但是,也有我删除消息的情况,decrementmessages.length .意思是,我在删除时也会向下滚动到底部,我想避免这种行为。消息存储在我的 redux 存储中,可作为 Prop 访问。useEffect有没有办法只听增量?
有没有办法访问消息的先前状态?
或者正在存储一个 prevLength变量不可避免?
这是我的代码中需要修改的部分:

// Scroll to bottom upon new message:
useEffect(() => {
scrollDown();
}, [messages.length]);
这是整个代码:
import { useState, useEffect} from 'react';
//Components:
import ChatBubble from './ChatBubble';
import ScrollButton from './ScrollButton';

export default function MessagesBoard({ messages }) {

//useState:
const [showScrollButton, setShowScrollButton] = useState(false);

//Event: Scroll to bottom upon new message
useEffect(() => {
scrollDown();
}, [messages.length]);

const scrollDown = () => {
....
};

return (
<div className='chatMessagesBlock'>
<div className='messagesCanvas'>
{messages.map((chatMessage) => {
return (
<ChatBubble
key={msgID}
msgID={msgID}
sender={sender}
msgContent={msgContent}
/>
);
})}
</div>

<ScrollButton
showScrollButton={showScrollButton}
scrollDown={scrollDown}
/>
</div>
);
}

最佳答案

您可以在 useRef 中跟踪先前的长度:

const prevLength = useRef(0);
useEffect(() => {
if (prevLength.current < message.length) {
scrollDown();
}
prevLength.current = messages.length;
}, [messages.length]);

关于javascript - 实现 React 的 UseEffect 只监听增量/减量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68705049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com