Javascript 在useEffect钩子中提到的对延迟事件的反应,它是什么意思?
我在读关于Javascript 在useEffect钩子中提到的对延迟事件的反应,它是什么意思?,javascript,reactjs,dom,react-hooks,Javascript,Reactjs,Dom,React Hooks,我在读关于useffecthook的文章,他们提到: 在延迟事件期间,传递给useEffect的函数在布局和绘制之后激发 你能解释什么是延迟事件吗?它是DOM核心的一部分还是什么 感谢…以特定的react用例回答问题: 您希望指示渐进式Web应用可安装,并提供自定义的应用内安装流程: 侦听beforeinstallprompt事件 保存beforeinstallprompt事件,以便以后可以使用它触发安装流 提醒用户您的PWA是可安装的,并提供按钮或其他元素来启动应用程序内安装流程 下面是延
useffect
hook的文章,他们提到:
在延迟事件期间,传递给useEffect的函数在布局和绘制之后激发
你能解释什么是延迟事件吗?它是DOM核心的一部分还是什么
感谢…以特定的react用例回答问题:
您希望指示渐进式Web应用可安装,并提供自定义的应用内安装流程:
- 侦听beforeinstallprompt事件
- 保存beforeinstallprompt事件,以便以后可以使用它触发安装流
- 提醒用户您的PWA是可安装的,并提供按钮或其他元素来启动应用程序内安装流程
let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {
// Stash the event so it can be triggered later.
deferredPrompt = e;
// Update UI notify the user they can install the PWA
showInstallPromotion();
});
我们提供了一个用户使用不同的变量单击的UI元素
buttonInstall.addEventListener('click', (e) => {
// Hide the app provided install promotion
hideMyInstallPromotion();
// Show the install prompt
deferredPrompt.prompt();
// Wait for the user to respond to the prompt
deferredPrompt.userChoice.then((choiceResult) => {
if (choiceResult.outcome === 'accepted') {
console.log('User accepted the install prompt');
} else {
console.log('User dismissed the install prompt');
}
})
});
希望这能让雾散一点。简言之
在延迟事件期间
这只会让您感到困惑:传递给useEffect hook的函数不会立即运行,而是在稍后触发的事件期间运行(精确地说是在绘制之后)
详细信息
React-under-hood与名为Fiber的算法的实现一起工作。简而言之,它改进了React对异步任务和优先级的处理
useEffect创建的效果在内部称为被动效果。基于功能组件中定义顺序的被动效果使用下一种方法彼此链接,并计划在每次绘制(而不是渲染)后运行
@Agney你能在Reactjs land中用一个简单的例子来解释这一点吗?延迟事件是一个JavaScript概念,这就是Reactjs文档没有解释它的原因。如果您查找
javascript延迟事件
,您可以找到许多解释该概念的博客和帖子
// This commit included a passive effect. These do not need to fire until
// after the next paint. Schedule an callback to fire them in an async
// event. To ensure serial execution, the callback will be flushed early if
// we enter rootWithPendingPassiveEffects commit phase before then.