Jas*_*ang 17 javascript reactjs react-hooks
我使用此代码来侦听函数组件中的调整大小事件,并在调整窗口大小时重新渲染该组件。问题是,任何一个事件监听器都没有打印出任何内容,所以我认为我对这里如何使用 useEffect 有误解。
const [dimensions, setDimensions] = React.useState({
width: window.innerWidth,
height: window.innerHeight,
});
useEffect(() => {
const handleResize = () => {
console.log(dimensions.width);
setDimensions({
width: window.innerWidth,
height: window.innerHeight,
});
window.addEventListener("load", handleResize, false);
window.addEventListener("resize", handleResize, false);
};
});
Run Code Online (Sandbox Code Playgroud)
fra*_*cis 36
import { useState, useEffect } from "react";
// Usage
function App() {
const size = useWindowSize();
return (
<div>
{size.width}px / {size.height}px
</div>
);
}
// Hook
function useWindowSize() {
// Initialize state with undefined width/height so server and client renders match
// Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined,
});
useEffect(() => {
// Handler to call on window resize
function handleResize() {
// Set window width/height to state
setWindowSize({
width: window.innerWidth,
height: window.innerHeight,
});
}
// Add event listener
window.addEventListener("resize", handleResize);
// Call handler right away so state gets updated with initial window size
handleResize();
// Remove event listener on cleanup
return () => window.removeEventListener("resize", handleResize);
}, []); // Empty array ensures that effect is only run on mount
return windowSize;
}
Run Code Online (Sandbox Code Playgroud)
小智 20
const [dimensions, setDimensions] = React.useState({
width: window.innerWidth,
height: window.innerHeight,
});
console.log(dimensions);
const handleResize = () => {
setDimensions({
width: window.innerWidth,
height: window.innerHeight,
});
}
React.useEffect(() => {
window.addEventListener("resize", handleResize, false);
}, []);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43859 次 |
最近记录: |