I want to update state with the inner window height as I resize the screen. When I log the state height within the useEffect
hook I get 0 each time however, when I log inside the updateWindowDimensions
function the height value is updated as expected.
How can I update state with the new value each time?
const [height, setHeight] = useState(0);
const updateWindowDimensions = () => {
const newHeight = window.innerHeight;
setHeight(newHeight);
console.log('updating height');
};
useEffect(() => {
window.addEventListener('resize', updateWindowDimensions);
console.log("give height", height);
}, []);
Your useEffect
is only being run one time, when the component mounts (because of the empty array []
you passed as the second argument)
If you simply log outside of it, you'll see your state value is being updated correctly
const [height, setHeight] = useState(0);
useEffect(() => {
const updateWindowDimensions = () => {
const newHeight = window.innerHeight;
setHeight(newHeight);
console.log("updating height");
};
window.addEventListener("resize", updateWindowDimensions);
return () => window.removeEventListener("resize", updateWindowDimensions)
}, []);
console.log("give height", height);
Also you should move the declaration of that function inside the useEffect
so it's not redeclared on every render
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With