【问题标题】:Why the variable in styled-jsx tag didn't work?为什么 styled-jsx 标签中的变量不起作用?
【发布时间】:2019-12-22 05:06:02
【问题描述】:

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>
  )
}

【问题讨论】:

    标签: javascript reactjs next.js styled-jsx


    【解决方案1】:

    设置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);
      }
    }
    

    【讨论】:

    • 我不想使用类组件,所以我使用了带有 useState() 的 React Hooks 并且它有效。谢谢你。 :)
    猜你喜欢
    • 2018-10-20
    • 2017-01-13
    • 2017-09-26
    • 2020-01-01
    • 2021-08-24
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多