0

div组件不固定,但变量sticky为真。为什么?

import React, { useEffect } from 'react'

export default function Navbar(props) {

  const DESKTOP_Y = 250
  const MOBILE_Y = DESKTOP_Y / 2

  let sticky = false

  const handleScroll = () => {
    console.log(window.innerWidth + ' ' + window.scrollY + ' ' + sticky)
    if (window.innerWidth > 850) {
      if (window.scrollY > DESKTOP_Y) {
        sticky = true
      } else {
        sticky = false
      }
    } else if (window.innerWidth < 850) {
      if (window.scrollY > MOBILE_Y) {
        sticky = true
      } else {
        sticky = false
      }
    }
  }

  useEffect(() => {
    window.addEventListener('scroll', handleScroll)
    return () => {
      window.removeEventListener('scroll', handleScroll)
    }
  }, [])

  return (
    <nav>
      <div>Pozdro</div>
      <style jsx>
        {`
          div {
            ${sticky ? 'position: fixed' : ''}
          }
        `}
      </style>
    </nav>
  )
}
4

1 回答 1

2

设置sticky实际上不会更新您的组件。尝试使用反应钩子来跟踪状态:

sticky, setSticky = useState(0);
const handleScroll = () => {
console.log(window.innerWidth + ' ' + window.scrollY + ' ' + sticky)
if (window.innerWidth > 850) {
  if (window.scrollY > DESKTOP_Y) {
    setsticky(true);
  } else {
    setsticky(false);
  }
} else if (window.innerWidth < 850) {
  if (window.scrollY > MOBILE_Y) {
       setsticky(true);
  } else {
       setsticky(false);
  }
}
于 2019-12-21T21:01:59.563 回答