- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试重新呈现组件以在用户阻止或允许知道其位置时隐藏或显示“使用当前位置”按钮(通过单击浏览器地址左侧的信息图标 Chrome )。我完全不明白为什么下面的第一个示例有效(即,一旦更改权限,按钮就会相应地切换)但第二个示例无效(它需要刷新)。
我试图通过简单地定义常量 hasPermission
来删除重复的 permission.state !== 'denied'
。
此外,我不会清理 onchange 监听器。我该怎么做呢?我可以只分配给 null 或删除该属性吗?
作品:
useEffect(() => {
navigator.permissions.query({ name: 'geolocation' }).then(permission => {
setHasPermission(permission.state !== 'denied')
permission.onchange = () =>
setHasPermission(permission.state !== 'denied')
})
}, [])
不起作用:
useEffect(() => {
navigator.permissions.query({ name: 'geolocation' }).then(permission => {
const hasPermission = permission.state !== 'denied';
setHasPermission(hasPermission)
permission.onchange = () =>
setHasPermission(hasPermission)
})
}, [])
最佳答案
基本上,permission.onchange
只定义一次。
因此,当您在第二个示例中定义 permission.onchange = () => setHasPermission(hasPermission)
时,您创建了一个将始终调用 setHasPermission
同值:permission.state !== 'denied'
保存的结果。
在您的第一个示例中,它起作用是因为 permission.state !== 'denied'
在事件回调中被评估。
够清楚吗?
对于清理,useEffect
可以返回一个函数,该函数将在组件卸载时调用。请查看https://reactjs.org/docs/hooks-effect.html#example-using-hooks-1
关于javascript - 带回调的 useEffect 不更新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55966230/
这个问题在这里已经有了答案: Call native javascript function that has been "erased" by the web page (1 个回答) 关闭 4
我有一个 UITableViewController。 但是当我滚动到顶部时,可以在状态栏上看到表格数据,如下所示: 我怎样才能绕过这个时刻? 最佳答案 您可以使用下一个代码段隐藏状态栏: overr
我想让一个 View 显示在另一个 View 的顶部。 这是我的 View 层次结构: 基本上我想把按钮(重新开始)放在属于 PageViewController 的 UIImageView 前面。所
这是一个代码片段 tips = sns.load_dataset("tips") g = sns.FacetGrid(tips, col = 'time') g = g.map(plt.hist, "
下面的 php 数据库查询(来自 phpMyAdmin)只将一个值(第一个或最旧的)带回 amcharts: set_no_cache(); // do whatever you wa
我正在使用 mootools 从一个元素中获取 id,但它不起作用,它返回了 id 和 null。 $$(".obj").addEvent("click",function(){ var o
从内存中,微软拿了 AppDomain离开了,这个机制已经被关闭了。 现在突然发现AppDomain回来了: Assembly System.Runtime.Extensions, Version=4
我是一名优秀的程序员,十分优秀!