Jak uzyskać wysokość rzutni w ReactJS? W normalnym JavaScript używam
window.innerHeight()
ale używając ReactJS, nie jestem pewien, jak uzyskać te informacje. Rozumiem, że
ReactDOM.findDomNode()
działa tylko dla utworzonych komponentów. Nie dotyczy to jednak elementu document
or body
, który mógłby mi podać wysokość okna.
javascript
reactjs
window
viewport
Jabran Saeed
źródło
źródło
.bind(this)
z argumentów wywołania zwrotnego, ponieważ są one już powiązane przez konstruktor.this.state = { width: 0, height: 0 };
taki, aby zmienne stanu nie zmieniały swoich typów (jeśli dobrze rozumiem, window.innerWidth jest liczbą całkowitą ). Nie zmienia niczego poza tym, że ułatwia zrozumienie kodu IMHO. Dziękuję za odpowiedź!this.state = { width: window.innerWidth, height: window.innerHeight };
zacząć?Korzystanie z hooków (reagowanie
16.8.0+
)Utwórz
useWindowDimensions
haczyk.A potem będziesz mógł go używać w swoich komponentach, takich jak ten
Przykład roboczy
Oryginalna odpowiedź
Tak samo jest w Reakcie, którego możesz użyć,
window.innerHeight
aby uzyskać wysokość bieżącej rzutni.Jak widać tutaj
źródło
cleanup
funkcją, możesz o tym przeczytać tutajreq
rekwizyt jest dostępnygetInitialProps
. Jeśli tak, to działa na serwerze, nie będziesz mieć zmiennych okna.źródło
height: window.innerHeight || props.height
. To nie tylko uprości kod, ale także usunie niepotrzebne zmiany stanu.componentWillMount
nie jest już zalecany, patrz Reactjs.org/docs/react-component.html#unsafe_componentwillmountWłaśnie zredagowałem obecną odpowiedź QoP , aby obsługiwać SSR i używać jej z Next.js (React 16.8.0+):
/hooks/useWindowDimensions.js :
/yourComponent.js :
źródło
Odpowiedź @speckledcarp jest świetna, ale może być uciążliwa, jeśli potrzebujesz tej logiki w wielu komponentach. Możesz zmienić to na HOC (komponent wyższego rzędu), aby ułatwić ponowne użycie tej logiki.
withWindowDimensions.jsx
Następnie w głównym komponencie:
Możesz także układać w stosy HOC, jeśli masz inny, którego potrzebujesz, np
withRouter(withWindowDimensions(MyComponent))
Edycja: W dzisiejszych czasach korzystałbym z haka React ( przykład powyżej ), ponieważ rozwiązują one niektóre zaawansowane problemy z HOCami i klasami
źródło
Właśnie poświęciłem trochę czasu na zastanowienie się nad niektórymi rzeczami związanymi z Reagowaniem i przewijaniem wydarzeń / pozycji - więc dla tych, którzy wciąż szukają, oto co znalazłem:
Wysokość rzutni można znaleźć, używając window.innerHeight lub document.documentElement.clientHeight. (Bieżąca wysokość rzutni)
Wysokość całego dokumentu (treści) można znaleźć za pomocą window.document.body.offsetHeight.
Jeśli próbujesz znaleźć wysokość dokumentu i wiesz, kiedy osiągnąłeś dno - oto, co wymyśliłem:
(Mój pasek nawigacyjny miał 72 piksele w stałej pozycji, więc -72, aby uzyskać lepszy wyzwalacz zdarzenia przewijania)
Wreszcie, oto kilka poleceń przewijania do console.log (), które pomogły mi aktywnie zrozumieć matematykę.
Uff! Mam nadzieję, że to komuś pomoże!
źródło
źródło
Odpowiedzi @speckledcarp i @Jamesl są genialne. Jednak w moim przypadku potrzebowałem komponentu, którego wysokość mogłaby rozszerzyć pełną wysokość okna, warunkowo w czasie renderowania ... ale wywołanie HOC w ramach
render()
renderuje całe poddrzewo. BAAAD.Poza tym nie byłem zainteresowany pobieraniem wartości jako rekwizytów, ale po prostu chciałem, aby rodzic
div
zajmował całą wysokość ekranu (lub szerokość lub obie).Napisałem więc komponent Parent, który zawiera element div o pełnej wysokości (i / lub szerokości). Bum.
Przypadek użycia:
Oto składnik:
źródło
Możesz także spróbować tego:
źródło