Implementieren Sie die Scroll-to-Bottom-Funktion in React
- Die Scroll-to-Bottom-Funktion in React
- Erstellen Sie Klassenkomponenten, um die Scroll-to-Bottom-Funktion in React zu implementieren
- Erstellen Sie funktionale Komponenten, um die Scroll-to-Bottom-Funktion in React zu implementieren
Moderne Anwendungen sind manchmal mit Informationen überladen, daher ist das Scrollen eine der Funktionen, die Entwicklern helfen, die Aufmerksamkeit der Kunden zu steuern und eine gute Benutzererfahrung zu bieten.
React ist eine Bibliothek zum Erstellen blitzschneller Single-Page-Anwendungen. React-Entwickler können Anwendungen mit modernen Funktionen erstellen, um die beste Benutzererfahrung zu bieten.
Natürlich kann es eine Frage geben, wie man Bildlauffunktionen in React implementiert? In diesem Artikel erfahren Sie, wie Sie die Funktion Nach unten scrollen
in React hinzufügen.
Die Scroll-to-Bottom-Funktion in React
Um ein automatisches Scrollen zum Ende eines Container-Elements in React zu implementieren, verwenden wir refs
und die native Element.scrollIntoView()
-Methode.
Definition von refs
in React
Webentwickler verwenden in der Regel refs
, um eine Referenz auf ein HTML-Element in einer Variablen zu speichern. Sie können diese Variable in ihren JavaScript-Funktionen und -Methoden verwenden.
Kurz gesagt, refs
erleichtern die Arbeit mit Elementen in JavaScript.
Da React sich nicht direkt mit DOM befasst, empfehlen die offiziellen Dokumente der Bibliothek, so wenige refs
wie möglich zu verwenden. Dennoch sind refs
notwendig, wenn Sie in React zum Ende eines Containers scrollen möchten.
Die Element
-Schnittstelle ermöglicht es uns, Methoden für die Elemente selbst aufzurufen. scrollIntoView()
ist eine dieser Methoden, mit der wir das Scrollen zu einem bestimmten Element erzwingen können, um sicherzustellen, dass es auf dem Bildschirm des Benutzers erscheint.
Wie Sie vielleicht schon erraten haben, verwenden wir refs
, um anzugeben, auf welches Element wir uns konzentrieren möchten.
Erstellen Sie Klassenkomponenten, um die Scroll-to-Bottom-Funktion in React zu implementieren
Seit der Einführung der ES6-Syntax können React-Entwickler ganz einfach Klassenkomponenten schreiben. Lassen Sie uns untersuchen, wie Sie ohne weiteres eine scroll to bottom
-Funktion in Komponenten der React-Klasse implementieren können.
class Messages extends React.Component {
constructor(props) {
super(props);
this.state = {
messages: [
"message 1",
"message 2",
"message 3",
"message 4",
"message 5",
"message 6",
"message 7",
"message 8",
"message 9",
"message 10",
"message 11",
"message 12",
"message 13",
"message 14",
"message 15",
"message 16",
"message 17",
"message 18"
]
};
}
messagesEndRef = React.createRef();
componentDidMount() {
this.scrollToBottom();
}
componentDidUpdate() {
this.scrollToBottom();
}
scrollToBottom = () => {
this.messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
};
render() {
return (
<div>
{this.state.messages.map((message) => (
<h1>{message}</h1>
))}
<div ref={this.messagesEndRef} />
</div>
);
}
}
export default Messages;
Wenn Sie sich diese Live-Demo ansehen, werden Sie feststellen, dass wir in dieser Anwendung einen scrollbaren Container voller <h1>
-Elemente haben, die die Nachrichten in Ihrer Anwendung darstellen sollen. Jedes Mal, wenn die Anwendung neu geladen wird, gelangt der Benutzer automatisch zum Ende der Seite.
Wenn Sie also einen Online-Chat haben, können Sie diese Funktion implementieren, um sie bei jedem Neuladen der Seite zu den neuesten Nachrichten unten zu bringen.
Lassen Sie uns nun verdauen, was im Code vor sich geht.
-
Hier haben wir eine Klassenkomponente
Messages
. Zuerst erstellen wir einemessagesEndRef
-Variable und setzen sie auf dieReact.createRef()
-Methode, um dieref
zu initialisieren. -
Dann erstellen wir ein leeres
<div>
-Element am unteren Rand des Containers und setzen seinref
-Attribut aufthis.messagesEndRef
.Dies ist notwendig, da ein leeres
<div>
keinen Platz einnimmt und daher mit bloßem Auge nicht wahrnehmbar ist. Indem wir es nach den<h1>
-Elementen platzieren, stellen wir sicher, dass es immer das letzte Element im übergeordneten Container ist.Daher ist es ein perfektes Element, um es als Referenzpunkt zu verwenden, um nach unten zu scrollen.
-
In JSX sind geschweifte Klammern erforderlich, um einen beliebigen JavaScript-Ausdruck zu schreiben, z. B. um auf die Eigenschaft
messagesEndRef
einer Klasseninstanz zu verweisen.Für den nächsten Schritt müssen wir eine
scrollToBottom()
-Funktion schreiben, um nach unten zu scrollen. Innerhalb dieser Funktion greifen wir auf die Eigenschaftcurrent
der VariablemessagesEndRef
zu und rufen die MethodescrollIntoView()
auf.Es ist unnötig, aber wir können angeben, dass der Bildlauf glatt sein soll. Diese Option bietet eine viel bessere Benutzererfahrung.
-
Dann verwenden wir die Lebenszyklusmethoden
componentDidMount()
undcomponentDidUpdate()
, um die für diese Klasse definierte MethodescrollToBottom()
aufzurufen. Die LebenszyklusmethodecomponentDidMount()
führt diese Funktion jedes Mal aus, wenn die Komponente geladen wird.Wenn Benutzer also Ihre Messaging-App laden, werden sie nach unten geleitet, um die neueste Nachricht zu lesen. Die Lebenszyklusmethode
componentDidUpdate()
ruft diese Funktion auf, wenn sich die Zustandseigenschaft ändert.Jedes Mal, wenn dem Status eine neue Nachricht hinzugefügt wird, wird die Komponente neu gerendert und führt den Benutzer zur neuesten Nachricht.
-
Abschließend geben wir einen einfachen
<div>
-Container zurück. Hier gehen wir alle Werte in der State-Eigenschaft durch und zeigen sie als<h1>
-Elemente an.Wir haben auch ein leeres
<div>
, das wir als Ankerpunkt verwenden, um React mitzuteilen, wohin es scrollen soll.
Erstellen Sie funktionale Komponenten, um die Scroll-to-Bottom-Funktion in React zu implementieren
Seit der Veröffentlichung von React v16.8 verfügen Funktionskomponenten über alle Funktionen, die früher nur Klassenkomponenten vorbehalten waren.
Insbesondere können Sie das Feature useState()
verwenden, um den Zustand in funktionalen Komponenten zu initialisieren. Der Hook useRef()
kann die Lifestyle-Methoden aus dem vorherigen Beispiel ersetzen.
Außerdem importieren wir anstelle der Methode createRef()
den Hook useRef()
aus dem Kernpaket react
.
import React, { useEffect, useRef, useState } from 'react'
const Messenger = () => {
const [messages, setMessages] = useState([
"message 1",
"message 2",
"message 3",
"message 4",
"message 5",
"message 6",
"message 7",
"message 8",
"message 9",
"message 10",
"message 11",
"message 12",
"message 13",
"message 14",
"message 15",
"message 16",
"message 17",
"message 18"
])
const bottom = useRef(null)
const scrollToBottom = () => {
bottom.current.scrollIntoView({ behavior: "smooth" })
}
useEffect(() => {
scrollToBottom()
}, [messages]);
return (
<div>
{messages.map(message => <h1>{message}</h1>)}
<div ref={bottom}></div>
</div>
)
}
Lassen Sie uns nun das obige Codebeispiel verdauen.
-
Zuerst initialisieren wir den Zustand und setzen ihn gleich dem Array von Nachrichten. Der
useState()
-Hook hat auch eine Updater-Funktion erstellt, sodass wir bei Bedarf weitere Nachrichten hinzufügen können. -
Dann haben wir mit dem Hook
useRef()
eineref
initialisiert und in der Variablenbottom
gespeichert. Wir setzen das Attributref
eines leeren div gleich dieser Variablen. Vergessen Sie nicht, geschweifte Klammern zu verwenden. -
Dann implementieren wir die Funktion
scrollToBottom
, die fast identisch mit der Funktion aus dem vorherigen Beispiel ist.Wir greifen auf die Eigenschaft
current
derref
und die MethodescrollIntoView()
zu. Wir fügen auch hier eine Smooth-Scrolling-Option hinzu. -
Schließlich verwenden wir den Haken
useEffect()
, um zwei Lebenszyklusmethoden von vorher zu ersetzen.Der Hook nimmt zwei Argumente entgegen, und eines ist die Funktion, die jedes Mal ausgeführt wird, wenn die Komponente bereitgestellt wird. Das zweite Argument ist ein Array von Zustandsvariablen, auf die Sie achten müssen.
Ändert sich der Wert der Zustandsvariable
messages
, führtuseEffect()
die Funktion ebenfalls aus. Dies führt zum gleichen Ergebnis wie die Verwendung des Lebenszyklus-HookscomponentDidUpdate()
.
Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.
LinkedIn