Eu tenho um widget de bate-papo que exibe uma variedade de mensagens toda vez que eu rolar para cima. O problema que estou enfrentando agora é que o controle deslizante permanece fixo na parte superior quando as mensagens são carregadas. Eu quero que ele se concentre no último elemento de índice da matriz anterior. Eu descobri que posso fazer referências dinâmicas passando o índice, mas também precisaria saber que tipo de função de rolagem usar para conseguir isso.
handleScrollToElement(event) {
const tesNode = ReactDOM.findDOMNode(this.refs.test)
if (some_logic){
//scroll to testNode
}
}
render() {
return (
<div>
<div ref="test"></div>
</div>)
}
javascript
reactjs
ecmascript-6
edmamerto
fonte
fonte
Respostas:
Reagir 16,8 +, componente funcional
Clique aqui para obter uma demonstração completa do StackBlits
Reagir 16.3 +, componente Classe
Componente de classe - retorno de chamada de referência
Não use String refs.
Refs de string prejudicam o desempenho, não são compostáveis e estão saindo (agosto de 2018).
resource1 resource2
Opcional: Suavizar animação de rolagem
Passando ref para uma criança
Queremos que o ref seja anexado a um elemento dom, não a um componente de reação. Portanto, ao passá-lo para um componente filho, não podemos nomear o prop ref.
Em seguida, conecte o ref prop a um elemento dom.
fonte
window.scrollTo(0, offsetTop)
é uma opção melhor com melhor suporte entre os navegadores atuaisisso funcionou para mim
EDIT: Eu queria expandir isso com base nos comentários.
fonte
Basta encontrar a posição superior do elemento que você já determinou https://www.w3schools.com/Jsref/prop_element_offsettop.asp e, em seguida, role para esta posição através do
scrollTo
método https://www.w3schools.com/Jsref/met_win_scrollto.aspAlgo assim deve funcionar:
ATUALIZAR:
desde Reagir v16.3 o
React.createRef()
é preferidofonte
ReactDOM.findDomNode()
é melhor prática - desde Reagir re-processa componentes, uma div que você simplesmente obter pelo seu ID pode não existir no momento em que você chamar a funçãofindDOMNode
. Na maioria dos casos, você pode anexar uma referência ao nó DOM e evitar o usofindDOMNode
.this.myRef.current.scrollIntoView()
vez dewindow.scrollTo(0, this.myRef)
.O uso de findDOMNode será descontinuado eventualmente.
O método preferido é usar refs de retorno de chamada.
github eslint
fonte
Agora você pode usar a
useRef
partir da API de gancho de reaçãohttps://reactjs.org/docs/hooks-reference.html#useref
declaração
componente
Usar
fonte
console.log
disso, que está executando suawindow.scrollTo
instrução (ajustada para o meu caso), mas ainda assim não rola. Isso pode estar relacionado ao fato de eu estar usando um React Bootstrap Modal?Você também pode usar o
scrollIntoView
método para rolar para um determinado elemento.fonte
Talvez eu esteja atrasado para a festa, mas estava tentando implementar referências dinâmicas para o meu projeto da maneira correta e todas as respostas que encontrei até saberem que não são silenciosas, satisfazendo ao meu gosto, por isso vim com uma solução que acho que é simples e usa a maneira nativa e recomendada de reagir para criar a referência.
Às vezes, você descobre que a maneira como a documentação é gravada assume que você possui uma quantidade conhecida de visualizações e, na maioria dos casos, esse número é desconhecido; portanto, você precisa de uma maneira de resolver o problema. Nesse caso, crie referências dinâmicas para o número desconhecido de visualizações necessárias. para mostrar na aula
então a solução mais simples que eu consegui pensar e funcionou perfeitamente foi fazer o seguinte
Dessa forma, o pergaminho irá para qualquer linha que você estiver procurando ..
aplausos e espero que ajude os outros
fonte
Jul 2019 - Gancho / função dedicada
Um gancho / função dedicado pode ocultar os detalhes da implementação e fornece uma API simples para seus componentes.
Reagir 16.8 + Componente Funcional
Use-o em qualquer componente funcional.
demonstração completa
Componente React 16.3 + class
Use-o em qualquer componente de classe.
Demonstração completa
fonte
Você pode tentar desta maneira:
fonte
Você pode usar algo como
componentDidUpdate
fonte
Eu tive um cenário simples: quando o usuário clica no item de menu da minha barra de navegação da interface do usuário de material, quero rolar para baixo até a seção da página. Eu poderia usar refs e enfiá-los por todos os componentes, mas eu odeio threading props props múltiplos componentes porque isso torna o código frágil.
Acabei de usar o vanilla JS no meu componente de reação, e funciona bem. Coloquei um ID no elemento que eu queria rolar para e no componente do cabeçalho, fiz isso.
fonte
Siga esses passos:
1) Instale:
2) Importe o pacote:
3) Uso:
fonte
Aqui está o trecho de código do componente de classe que você pode usar para resolver esse problema:
Essa abordagem usou a ref e também rola suavemente até a ref de destino
fonte
A melhor maneira é usar
element.scrollIntoView({ behavior: 'smooth' })
. Isso rola o elemento em exibição com uma bela animação.Quando você o combina com o React
useRef()
, isso pode ser feito da seguinte maneira.Quando você deseja rolar para um componente React, precisa encaminhar a ref para o elemento renderizado. Este artigo irá aprofundar o problema .
fonte
(ref) => window.scrollTo(0, ref.current.offsetTop)
mas apenas obtendo um pequeno deslocamento do topo e não chegando ao alvo. Acredito que isso ocorreu porque a localização do juiz era alguém calculado no começo e depois não atualizado. Sua sugestão resolveu meu problema, enquanto a resposta aceita não.O que funcionou para mim:
fonte
Apenas um aviso, não consegui que essas soluções funcionassem nos componentes da interface do usuário do Material. Parece que eles não têm a
current
propriedade.Acabei de adicionar um vazio
div
entre meus componentes e definir o suporte de referência sobre isso.fonte
fonte
Para qualquer pessoa que leia isso que não teve muita sorte com as soluções acima ou apenas quer uma solução simples, este pacote funcionou para mim: https://www.npmjs.com/package/react-anchor-link- rolagem suave . Feliz Hacking!
fonte
Eu usei isso dentro de uma função onclick para rolar suavemente para uma div onde seu ID é "step2Div".
fonte