有没有一种简单的方法将ES6地图合并在一起(比如Object.assign)?虽然我们在这,但ES6套装(如Array.concat)?
我似乎在一个大型应用程序中遇到此错误(但我不确定在哪里):
未捕获错误:不变违规:setState(...):在现有状态转换(例如内部
render)期间无法更新.渲染方法应该是道具和状态的纯函数.
我怀疑它可能是在setState内部setTimeout或使用内部的结果setInterval.
这引出了我真正的问题:为什么会出现这种错误?是否有一些概念上的原因我不知道为什么ReactJS不只是排队状态和道具变化?我猜是否有原因,它与应用程序复杂性和/或避免竞争条件有关...
我的下一个问题是:在React之外更新组件的正确方法是什么(例如在某些异步事件期间),以便不会发生此错误?
编辑:
在进一步深入研究这个问题之后,看起来罪魁祸首实际上是我正在使用的基础平台(ElectronJS,正式的Atom Shell).基本上,ElectronJS将Chromium和NodeJS结合在一起.我正在使用NodeJS API来做异步操作,当它完成时,ElectronJS会返回到它停止的调用堆栈,完全绕过事件循环,从而导致与React的竞争条件.
我有以下代码,它应该example使用 JavaScript 的in运算符来优化变量的类型:
type Example = 'foo' | 'bar' | 'baz';
const objectWithSomeExampleKeys = {
foo: 'foo',
baz: 'baz'
};
function heresTheProblem(example: Example): void {
if (example in objectWithSomeExampleKeys) {
objectWithSomeExampleKeys[example];
}
}
Run Code Online (Sandbox Code Playgroud)
但相反,我收到以下错误:
10: objectWithSomeExampleKeys[example];
^ Cannot get `objectWithSomeExampleKeys[example]` because property `bar` is missing in object literal [1].
References:
3: const objectWithSomeExampleKeys = {
^ [1]
Run Code Online (Sandbox Code Playgroud)
我如何让 Flow 识别出example不可能bar或任何其他属性不在 中objectWithSomeExampleKeys?
我试图在页面上的所有子资源请求之前加载服务工作人员,以便我可以对子资源的加载方式应用一些优化(例如延迟加载、加载资产的缩小版本而不是完整资产)。但是,我找不到在其他子资源请求开始之前加载我的软件的方法。
我创建了一个简单的概念验证,说明我试图对我的 Service Worker 处理的任何请求执行 401 操作(只是为了更容易找到我的软件何时开始处理请求)。
这是我的 HTML:
<!doctype html>
<head>
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/dl-wps-sw.js', { scope: '/' }).then(function (registration) {
console.log('Service Worker registration successful with scope: ', registration.scope);
}, function (err) {
console.error(err);
});
}
</script>
...
Run Code Online (Sandbox Code Playgroud)
这是我的 Service Worker:
self.addEventListener('install', function (event) {
self.skipWaiting();
});
self.addEventListener('activate', () => {
self.clients.claim();
});
self.addEventListener('fetch', (event) => {
const init = {status: 401, statusText: 'Blocked!'};
event.respondWith(new Response(null, init));
});
Run Code Online (Sandbox Code Playgroud)
正如您在屏幕截图中看到的,即使我注册 Service Worker 的代码位于页面的最顶部,但直到稍后它才会激活并开始处理请求,到那时我会收到大量关键请求需要抓住已经发射的。
我发现其他人似乎正在尝试做我想要完成的事情(两年前),在 Service Worker …
我试图在新窗口中打开一个新页面,而不启动 Puppeteer 的另一个实例(即我不尝试运行puppeteer.launch()多次,因为这会创建另一个浏览器会话)。有没有办法可以使用browser.newPage()现有浏览器会话中的其他方法打开新窗口?
javascript ×4
ecmascript-6 ×1
flowtype ×1
node.js ×1
puppeteer ×1
react-native ×1
reactjs ×1
set ×1