2016-02-26 53 views
0
window.onerror = function(message, filename, lineno, colno, error) { 
    console.log(error.stack); 
}; 

沒有reactjs,一切都很好。我可以得到堆棧。使用反應時無法從window.onerror獲取錯誤對象

隨着reactjs我得到如下:

Uncaught TypeError: Cannot read property 'stack' of null 
window.onerror        @ index.html:9 
ReactErrorUtils.invokeGuardedCallback  @ ReactErrorUtils.js:71 
executeDispatch        @ EventPluginUtils.js:79 
executeDispatchesInOrder     @ EventPluginUtils.js:102 
executeDispatchesAndRelease     @ EventPluginHub.js:43 
executeDispatchesAndReleaseTopLevel   @ EventPluginHub.js:54 
forEachAccumulated       @ forEachAccumulated.js:23 
EventPluginHub.processEventQueue   @ EventPluginHub.js:259 
runEventQueueInBatch      @ ReactEventEmitterMixin.js:18 
ReactEventEmitterMixin.handleTopLevel  @ ReactEventEmitterMixin.js:34 
handleTopLevelWithoutPath     @ ReactEventListener.js:93 
handleTopLevelImpl       @ ReactEventListener.js:73 
Mixin.perform        @ Transaction.js:136 
ReactDefaultBatchingStrategy.batchedUpdates @ ReactDefaultBatchingStrategy.js:62 
batchedUpdates        @ ReactUpdates.js:94 
ReactEventListener.dispatchEvent   @ ReactEventListener.js:204 

在文件ReactErrorUtils.js

if (process.env.NODE_ENV !== 'production') { 
    /** 
    * To help development we can get better devtools integration by simulating a 
    * real browser event. 
    */ 
    if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') { 
    var fakeNode = document.createElement('react'); 
    ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) { 
     var boundFunc = func.bind(null, a, b); 
     var evtType = 'react-' + name; 
     fakeNode.addEventListener(evtType, boundFunc, false); 
     var evt = document.createEvent('Event'); 
     evt.initEvent(evtType, false, false); 
     // Line 71 
     fakeNode.dispatchEvent(evt); 
     fakeNode.removeEventListener(evtType, boundFunc, false); 
    }; 
    } 
} 

似乎reactjs劫持事件,並派遣缺乏錯誤論點新的事件。

如何從錯誤中獲取堆棧?

回答

1

雖然這不應該發生,但它可能是React內部使用的類名與應用程序的類名衝突。我搜索了這個問題,並找到了一個論壇,通過改變他的類名來解決這個問題。

REACT已經知道,得到其是誤導或給出奇小細節的錯誤(即Invariant Error

+0

錯誤應該有一個堆棧。見下文:http://embed.plnkr.co/kVAO57uMS3lVuqDuo9SM/ – reddiky

1

新的更新陣營16

有一個新的生命週期方法componentDidCatch當子組件內部出現錯誤時會觸發它。