Como obtenho a altura da janela de exibição no ReactJS? Em JavaScript normal eu uso
window.innerHeight()
mas usando o ReactJS, não sei como obter essas informações. Meu entendimento é que
ReactDOM.findDomNode()
funciona apenas para componentes criados. No entanto, esse não é o caso do elemento document
ou body
, o que pode me dar uma altura da janela.
javascript
reactjs
window
viewport
Jabran Saeed
fonte
fonte
.bind(this)
dos argumentos de retorno de chamada, já que ele já está vinculado pelo construtor.this.state = { width: 0, height: 0 };
para que os vars de estado não alterem seus tipos (se eu entendi corretamente window.innerWidth é inteiro ). Não muda nada, exceto torna o código mais fácil de entender IMHO. Obrigado pela resposta!this.state = { width: window.innerWidth, height: window.innerHeight };
começar?Usando ganchos (reagir
16.8.0+
)Crie um
useWindowDimensions
gancho.E depois disso, você poderá usá-lo em seus componentes como este
Exemplo de trabalho
Resposta original
É o mesmo em React, você pode usar
window.innerHeight
para obter a altura da viewport atual.Como você pode ver aqui
fonte
cleanup
função, você pode ler sobre ele aquireq
suporte está disponível emgetInitialProps
. Se estiver, está sendo executado no servidor, então você não terá variáveis de janela.fonte
height: window.innerHeight || props.height
. Isso não apenas simplifica o código, mas também remove alterações de estado desnecessárias.componentWillMount
não é mais recomendado, consulte reactjs.org/docs/react-component.html#unsafe_componentwillmountAcabei de editar a resposta atual do QoP para dar suporte ao SSR e usá-lo com o Next.js (React 16.8.0+):
/hooks/useWindowDimensions.js :
/yourComponent.js :
fonte
A resposta de @speckledcarp é ótima, mas pode ser entediante se você precisar dessa lógica em vários componentes. Você pode refatorá-lo como um HOC (componente de ordem superior) para facilitar a reutilização dessa lógica.
withWindowDimensions.jsx
Então no seu componente principal:
Você também pode "empilhar" HOCs se tiver outro que precise usar, por exemplo
withRouter(withWindowDimensions(MyComponent))
Edit: Eu usaria um gancho React hoje em dia ( exemplo acima aqui ), pois eles resolvem alguns dos problemas avançados com HOCs e classes
fonte
Passei um tempo sério tentando descobrir algumas coisas com React e rolando eventos / posições - então, para aqueles que ainda procuram, eis o que eu descobri:
A altura da janela de visualização pode ser encontrada usando window.innerHeight ou document.documentElement.clientHeight. (Altura atual da janela de visualização)
A altura do documento (corpo) inteiro pode ser encontrada usando window.document.body.offsetHeight.
Se você está tentando encontrar a altura do documento e sabe quando chegou ao fundo, eis o que eu vim:
(Minha barra de navegação tinha 72px na posição fixa, portanto -72 para obter um melhor acionador de evento de rolagem)
Por fim, aqui estão alguns comandos de rolagem para console.log (), que me ajudaram a descobrir minha matemática ativamente.
Uau! Espero que ajude alguém!
fonte
fonte
As respostas de @speckledcarp e @Jamesl são brilhantes. No meu caso, no entanto, eu precisava de um componente cuja altura pudesse estender a altura total da janela, condicional no momento da renderização ... mas chamando um HOC dentro
render()
novamente renderiza toda a subárvore. BAAAD.Além disso, eu não estava interessado em obter os valores como adereços, mas simplesmente queria um pai
div
que ocupasse toda a altura da tela (ou largura, ou ambos).Então, eu escrevi um componente Parent fornecendo uma div total de altura (e / ou largura). Estrondo.
Um caso de uso:
Aqui está o componente:
fonte
Você também pode tentar o seguinte:
fonte