【发布时间】:2021-04-18 19:15:16
【问题描述】:
我有一个用于 PWA 的带有 customButton 的组件:
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。控制台日志返回我:false 和下一个 true,所以如果 supportsPWA 是 true 为什么 React 不渲染 div test?
编辑:
我发现问题出在哪里。我在另一个组件中渲染 PWA 组件:{showMobileMenu && (<PWA />)}。 showMobileMenu 我通过按钮更改(从 false 到 true ),这是问题所在。当我删除 showMobileMenu && ... 而我只有 <PWA /> 时,div 测试会正确呈现。但是不知道怎么解决?
【问题讨论】:
-
您确定该组件没有被卸载并重新安装?
{console.log(supportsPWA)}的控制台中有多少条目?就2,真假?还是更多? -
@NadiaChibrikova 我只有假和真
-
这很奇怪。我会添加更多日志(在添加/删除事件侦听器之前和处理程序内部),也许可以带来一些亮点?
标签: reactjs react-hooks