2016-09-21 109 views
1

我有一个事件处理程序的滚动在我的反应,我试图使它被动。但它不工作,我一直在我的控制台中收到此警告:反应被动事件处理程序不工作

考虑将事件处理程序标记为“被动”,以使页面更具响应性。

所以这里是我读的事件:

bindEventListeners() 
{ 
    EventContainer.readWindowEvent('scroll', this.onScroll); 
} 

这里是我的EventContainer.js文件我readWindowEvent功能:

static readWindowEvent(slug, callback, passive = true) 
    { 
     let result = null; 

     let allowed = this.getAllowedWindowEventListeners().indexOf(slug) != -1; 

     if (!allowed) { 
      result = console.error(
       'You cannot register ' + slug + ' on the window. Allowed events: ' + 
       this.getAllowedWindowEventListeners().join(', ') 
      ) 
     } 

     if (allowed) { 
      result = window.addEventListener(
       slug, 
       callback, 
       {passive: passive} 
      ); 
     } 

     return result; 
    } 

在此行中:

{passive:passive}

我在编辑 参数类型收到以下错误:我在做什么错在这里{被动布尔}是不能分配给参数类型布尔

有谁知道?

任何帮助表示赞赏!

提前感谢:)

+0

将函数参数更改为'(slug,callback,passive)'并将第三个参数更改为' addEventListener()'到'{passive:passive === true}' – Archer

+0

@Archer不幸的是,这在编辑器中给出了同样的错误。我编译了我的反应,并在我的控制台中做了一个getEventListeners,它仍然表示被动:false:'( –

+0

对不起,没有帮助,我没有看到代码的任何错误,如果你只是用一个简单的1在浏览器控制台中它可以正常工作,它可能是React特定的,在这种情况下,我无法帮助,希望有人可以这样做! – Archer

回答

0

也许有点晚,现在来回答,但我有同样的问题。一种解决方法是使用对象的any型这是在传递:

let passiveObject: any = { passive: true } 
obj.addEventListener(evt, func, passiveObject) 

希望这可以帮助别人的未来!

0

没有任何理由让滚动监听器被动! 请仔细阅读文档 - 任何触摸滚轮&单击滚动div中的听众必须是被动的 - 它是被动监听者的主要目标