[英]ReactJS useEffect not rendering after dependency changed
所以我目前正在使用 React Hooks,我正在尝试使用 useEffect。 它假设每当依赖关系发生变化时,useEffect 就会重新渲染,对吗? 但这对我不起作用。 这是我的代码:
const [slidesPerView, setSlidesPerView] = React.useState(0)
React.useEffect(() => {
setSlidesPerView(() => (window.innerWidth <= 375 ? 1 : 2))
console.log("rerender?", slidesPerView)
}, [window.innerWidth])
每次更改屏幕尺寸时,useEffect 都不会重新渲染。 我想知道我做错了什么?
useEffect
将响应props
更改或state
更改。
每次屏幕大小改变组件都不知道window.innerWidth
是否改变,因为它不在state
或props
。
要使其工作,您需要将window.innerWidth
存储到 state 中,并将事件侦听器附加到您的window
,每当window
大小更改时,它将获取window.innerWidth
并将其存储到state
,并且随着state
更改,您的useEffect
将重新获得-run,最后你的组件将被重新渲染。
const [size, setSize] = React.useState(window.innerWidth)
React.useEffect(() => {
//Attach event on window which will track window size changes and store the width in state
window.addEventListener("resize", updateWidth);
setSlidesPerView(() => (size <= 375 ? 1 : 2));
console.log("rerender?", slidesPerView);
//It is important to remove EventListener attached on window.
return () => window.removeEventListener("resize", updateWidth);
}, [size])
const updateWidth = () => {
setSize(window.innerWidth)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.