Ich habe eine NextUI ListBox-Komponente mit der Eigenschaft isVirtualized und den entsprechenden Parameter. Es wird wie folgt erstellt:
Code: Select all
{selectedServer ? selectedServer.serverAlias : "Chat Title"}
{(item) => (
{item.text}
)}
Code: Select all
const ListboxWrapper = ({children}) => (
{children}
);
Ich habe derzeit:
Code: Select all
const scrollToBottom = () => {
messagesEndRef.current?.scrollIntoView({behavior: 'smooth' , block: 'end'})
}
Code: Select all
end
Ich hatte die gleichen Ergebnisse mit document.getElementById(..).scrollIntoView(..). Ich habe auch den Verweis auf das letzte Listenelement verschoben, aber wenn ich das mache, erscheint das letzte Listenelement oben im Container und die anderen Elemente sind nicht sichtbar und können nicht gescrollt werden.
Vielen Dank im Voraus!
BEARBEITEN:
Ich habe die unten vorgeschlagene Lösung ausprobiert, aber das gleiche Verhalten.
Es scheint, dass jedes Mal, wenn ich Text in das Eingabefeld eingebe, die ListBox zu scrollt die Spitze. Ich habe den obigen Code aktualisiert, um die vollständige Rückgabe der Komponente einzuschließen.
Die Funktionen onKeyPressHandler und onChangeHandler mit ihren Hooks:
Code: Select all
const [selectedKeys, setSelectedKeys] = React.useState(new Set(["text"]));
const selectedValue = React.useMemo(() => Array.from(selectedKeys).join(", "), [selectedKeys]);
const onKeyPressHandler = e => {
if (e.key === "Enter") {
const message = new ApiCall()
const chatRequest = new ChatRequest()
chatRequest.setChattext(textValue)
chatRequest.setServerid(selectedServer.serverID)
message.setChatrequest(chatRequest)
const apiCall = message.serializeBinary()
const requestOptions = {
method: 'POST',
headers: {'Content-Type': 'application/x-protobuf'},
body: apiCall
};
console.log("fetching chats")
fetch('http://localhost:8080/api/chats', requestOptions)
.then(response => {
if (response.ok) {
getChats()
}
changeTextValue("");
})
}
};
const onChangeHandler = e => {
changeTextValue(e.target.value);
};
Code: Select all
const getChats = () => {
fetch("http://localhost:8080/api/chats?serverID=" + selectedServer.serverID)
.then(res => res.json())
.then(data => {
setChats(data);
scrollToBottom()
})
}