使用纯javascript时如何禁用facebook中的“守卫”功能?

Posted

技术标签:

【中文标题】使用纯javascript时如何禁用facebook中的“守卫”功能?【英文标题】:How to disable the "guard" feature in facebook react when working with pure javascript? 【发布时间】:2014-01-29 04:52:32 【问题描述】:

我想获得原生 javascript 错误,而不是他们的(反应的)“守卫”错误。

什么是“守卫”:https://github.com/facebook/react/blob/9270d3d56ea3b196acc099409a38e6c07b191e46/src/vendor/stubs/ReactErrorUtils.js

https://github.com/facebook/react/search?q=guard&ref=cmdform

如您所见,Object [object Object] has no method 'map'. 之类的错误很难调试。 (http://www.andrewgreig.com/637/)

例如我得到这个错误:

undefined.__closeView: undefined is not a function react.js:7276
guarded react.js:7276
boundMethod react.js:4920

从此我什至不知道从哪里开始找到未定义的内容。

【问题讨论】:

Facebook 中的“守卫”反应”?你到底在说什么?这是您正在处理的网页吗?插件?我们需要更多信息才能提供帮助。 当点击时运行“选择”方法。这触发和事件并被应用程序的另一部分捕获。在这里,应用程序会引发错误。我正在使用 React.createClass 我真的不明白为什么会有这么多反对票??如果有人使用 react 应该知道有一个保护功能可以包装原始 javascript 错误... 我做@Totty :) 但最好能更好地理解这种保护方法在困扰你什么以及你所说的“纯 JavaScript”是什么意思。是否与功能纯度有关? 你可以在这里看到我一直在谈论的守卫是什么:github.com/facebook/react/blob/…。当脚本中发生错误时,它不会立即抛出,而是会被“守卫”捕获,“守卫”将再次抛出错误。这样做让我的生活更难理解问题出在哪里。我更喜欢 javascript 纯错误,不会被捕获。 【参考方案1】:

正如你给出的守卫实现:

var ReactErrorUtils = 
  /**
   * Creates a guarded version of a function. This is supposed to make debugging
   * of event handlers easier. This implementation provides only basic error
   * logging and re-throws the error.
   *
   * @param function func Function to be executed
   * @param string name The name of the guard
   * @return function
   */
  guard: function(func, name) 
    if (__DEV__) 
      return function guarded() 
        try 
          return func.apply(this, arguments);
         catch(ex) 
          console.error(name + ': ' + ex.message);
          throw ex;
        
      ;
     else 
      return func;
    
  
;

https://github.com/facebook/react/blob/9270d3d56ea3b196acc099409a38e6c07b191e46/src/vendor/stubs/ReactErrorUtils.js

也许您可以尝试不处于__DEV__ 模式,或者打开一个问题以支持一种简单的方法来禁用它。

【讨论】:

以上是关于使用纯javascript时如何禁用facebook中的“守卫”功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用javascript单击div中的链接时禁用div中的所有其他链接[重复]

使用 JavaScript 如何禁用右键单击或单击滚动条时如何在右键单击窗口中删除检查元素选项

如何禁用OpenSSH(CBC)加密模式防止信息泄露

禁用输入字段自动填充(纯 JS)

当数据在javascript codeigniter php中使用ajax成功功能时,如何禁用页面重新加载?

单击一个复选框时如何禁用特定复选框? JavaScript