小编jam*_*slk的帖子

合并ES6地图/集的最简单方法是什么?

有没有一种简单的方法将ES6地图合并在一起(比如Object.assign)?虽然我们在这,但ES6套装(如Array.concat)?

javascript set ecmascript-6

135
推荐指数
6
解决办法
8万
查看次数

为什么会出现此错误:"不变违规:在现有状态转换期间无法更新"

我似乎在一个大型应用程序中遇到此错误(但我不确定在哪里):

未捕获错误:不变违规:setState(...):在现有状态转换(例如内部render)期间无法更新.渲染方法应该是道具和状态的纯函数.

我怀疑它可能是在setState内部setTimeout或使用内部的结果setInterval.

这引出了我真正的问题:为什么会出现这种错误?是否有一些概念上的原因我不知道为什么ReactJS不只是排队状态和道具变化?我猜是否有原因,它与应用程序复杂性和/或避免竞争条件有关...

我的下一个问题是:在React之外更新组件的正确方法是什么(例如在某些异步事件期间),以便不会发生此错误?

编辑:

在进一步深入研究这个问题之后,看起来罪魁祸首实际上是我正在使用的基础平台(ElectronJS,正式的Atom Shell).基本上,ElectronJS将Chromium和NodeJS结合在一起.我正在使用NodeJS API来做异步操作,当它完成时,ElectronJS会返回到它停止的调用堆栈,完全绕过事件循环,从而导致与React的竞争条件.

javascript reactjs react-native

14
推荐指数
1
解决办法
1万
查看次数

流程:无法获取...因为属性...在对象文字中丢失

我有以下代码,它应该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

javascript flowtype

8
推荐指数
1
解决办法
7185
查看次数

如何在所有其他请求之前加载 Service Worker?

我试图在页面上的所有子资源请求之前加载服务工作人员,以便我可以对子资源的加载方式应用一些优化(例如延迟加载、加载资产的缩小版本而不是完整资产)。但是,我找不到在其他子资源请求开始之前加载我的软件的方法。

我创建了一个简单的概念验证,说明我试图对我的 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 …

javascript service-worker progressive-web-apps

7
推荐指数
1
解决办法
3352
查看次数

Puppeteer:如何在新窗口中打开页面?

我试图在新窗口中打开一个新页面,而不启动 Puppeteer 的另一个实例(即我不尝试运行puppeteer.launch()多次,因为这会创建另一个浏览器会话)。有没有办法可以使用browser.newPage()现有浏览器会话中的其他方法打开新窗口?

node.js puppeteer

5
推荐指数
1
解决办法
5357
查看次数