首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在呈现中响应useState不更改值

在呈现中响应useState不更改值
EN

Stack Overflow用户
提问于 2021-04-18 19:15:16
回答 1查看 118关注 0票数 1

我有一个用于PWA的带有customButton的组件:

代码语言:javascript
复制
const PWA = () => {
  const [supportsPWA, setSupportsPWA] = useState(false)
  const [deferredPrompt, setDeferredPrompt] = useState(null)

  useEffect(() => {
    const handler = e => {
      e.preventDefault()
      setDeferredPrompt(e)
      setSupportsPWA(true)
    }
    window.addEventListener('beforeinstallprompt', handler)

    return () =>
      window.removeEventListener('beforeinstallprompt', handler)
  }, [])

  return (
    <>
      {supportsPWA.toString()}
      {console.log(supportsPWA)}
      {supportsPWA && <div>test</div>}
    </>
  )
}
export default PWA

我有beforeinstallprompt,我将supportsPWA状态从false更改为true。在渲染中,我有supportsPWA.toString(),它总是false。控制台日志返回me:false和next true,所以如果supportsPWAtrue,为什么不反应呈现div test

编辑:

我发现问题出在哪里。我在另一个组件中呈现PWA组件:{showMobileMenu && (<PWA />)}showMobileMenu i按按钮更改(从false更改为true ),这里有问题。当我删除showMobileMenu && ...并且只有<PWA />时,div测试将正确呈现。但我不知道我怎么能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-04-18 22:04:07

在您的情况下,如果可以接受,而不是每次在PWA组件中显示/隐藏内容,就执行{showMobileMenu && (<PWA />)} (卸载和挂载您的组件):

代码语言:javascript
复制
const PWA = ({ showPWAComponent }) => {
  const [supportsPWA, setSupportsPWA] = useState(false)
  const [deferredPrompt, setDeferredPrompt] = useState(null)

  useEffect(() => {
    const handler = e => {
      e.preventDefault()
      setDeferredPrompt(e)
      setSupportsPWA(true)
    }
    window.addEventListener('beforeinstallprompt', handler)

    return () =>
      window.removeEventListener('beforeinstallprompt', handler)
  }, [])

  return showPWAComponent && (
    <div>
      {supportsPWA.toString()}
      {console.log(supportsPWA)}
      {supportsPWA && <div>test</div>}
    </div>
  )
}
export default PWA

在使用PWA go的另一个组件中:

代码语言:javascript
复制
{<PWA showPWAComponent={showMobileMenu} />)}

在任何其他情况下,您所拥有的这种情况不会完全工作,因为您已经删除了那里的组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67152481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档