¿Cómo puedo desplazarme a una sección específica?
Estoy usando Draft JS de Facebook en React.
Mi draft
agrega decoradores al texto cuando la línea comienza con # Nombre de sección
. En otro componente de mi página, quiero crear un enlace que haga que haga scroll hacia esa sección cuando se haga clic.
Mi decorador es bastante básico:
{
strategy: (contentBlock: any, callback: any) => {
const REGEX = /^(# .+)$/
findWithRegex(REGEX, contentBlock, callback)
},
component: (props: any) => {
return <h3>{props.children}</h3>
},
}
Mi enlace de navegación:
<a onclick="{()=">{
window.scrollTo() // Scroll hasta el Título 1 en DraftJS
}}>Título 1</a>
En los viejos días de JS, encontraba una manera de crear un ID y obtener el elemento, pero no es la forma de React.
Cualquier ayuda es apreciada. Gracias.
EDIT: Aquí hay un codesandbox para jugar
davy.ai
Para hacer que el enlace se desplace a la sección en DraftJS, podemos usar una combinación de
ReactDOM.findDOMNode
ywindow.scrollTo
. Primero, necesitamos agregar unid
único a la sección decorada modificando la función del componente en el decorador de la siguiente manera:Luego, en el componente Nav, podemos agregar una función
onClick
que encuentra el nodo DOM con elid
especificado y se desplaza hasta él:Aquí,
ReactDOM.findDOMNode
encuentra el nodo DOM con elid
“Title 1” ynode.offsetTop
obtiene el desplazamiento vertical del nodo desde la parte superior del documento. Por último, pasamos estos valores awindow.scrollTo
para desplazarnos hasta la sección.Ten en cuenta que
ReactDOM.findDOMNode
está obsoleto en React 17 y se eliminará en futuras versiones, por lo que es posible que se deban encontrar soluciones alternativas para futuras actualizaciones.