Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用断点和节流调整手柄尺寸_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 使用断点和节流调整手柄尺寸

Javascript 使用断点和节流调整手柄尺寸,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,考虑跟踪窗口宽度并基于给定点返回1或0的组件: export function useWindowResize() { const [width, setWidth] = useState(window.innerWidth < 650 ? 1 : 0) useEffect(() => { const handleResize = () => setWidth((window.innerWidth < 650 ? 1 : 0)) window.ad

考虑跟踪窗口宽度并基于给定点返回
1
0
的组件:

export function useWindowResize() {
  const [width, setWidth] = useState(window.innerWidth < 650 ? 1 : 0)
  useEffect(() => {
    const handleResize = () => setWidth((window.innerWidth < 650 ? 1 : 0))
    window.addEventListener('resize', handleResize)
    return () => {
      window.removeEventListener('resize', handleResize)
    }
  }, )
  return width
}
导出函数useWindowResize(){
const[width,setWidth]=useState(window.innerWidth<650?1:0)
useffect(()=>{
const handleResize=()=>setWidth((window.innerWidth<650?1:0))
window.addEventListener('resize',handleResize)
return()=>{
window.removeEventListener('resize',handleResize)
}
}, )
返回宽度
}
如果将条件放置在上面示例中所示的位置,则只会在给定的断点处进行重新渲染。 但如果我们在返回中放置条件,则每次调整大小时都会发生重新渲染:

export function useWindowResize() {
  const [width, setWidth] = useState(window.innerWidth)
  useEffect(() => {
    const handleResize = () => setWidth((window.innerWidth))
    window.addEventListener('resize', handleResize)
    return () => {
      window.removeEventListener('resize', handleResize)
    }
  }, )
  return width < 650 ? 1 : 0
}
导出函数useWindowResize(){
const[width,setWidth]=useState(window.innerWidth)
useffect(()=>{
const handleResize=()=>setWidth((window.innerWidth))
window.addEventListener('resize',handleResize)
return()=>{
window.removeEventListener('resize',handleResize)
}
}, )
返回宽度<650?1:0
}
如果我在第一个示例中理解正确,则每个窗口大小调整都会触发条件检查并设置状态,然后钩子会比较状态,并且由于真/假在断点之前不会更改,因此组件不会重新渲染

我的问题是: A.哪种方式更节省资源? 在第一个示例中,我是否仍要限制事件侦听器