HintergrundDiagnostizieren Auslöser Range: Maximale Call-Stack-Größe überschritten in React KeyEscapeUtils
Unsere Webapp mit Reagieren und Redux mit den offiziellen reagieren-redux Bindungen geschrieben. Eine andere primäre Bibliothek, die in dieser Web-App verwendet wird, ist . Wir haben dies kürzlich in eine Redux-App umgewandelt, obwohl es seit einiger Zeit React verwendet.
Das Problem
manchmal Refreshing (in der Regel jeden zweiten Refresh) verursacht eine
RangeError: Maximum call stack size exceeded
at String.replace (<anonymous>)
at Object.unescape (KeyEscapeUtils.js:49)
at flattenSingleChildIntoContext (flattenChildren.js:32)
at flattenChildren.js:53
at traverseAllChildrenImpl (traverseAllChildren.js:69)
at traverseAllChildrenImpl (traverseAllChildren.js:85)
at traverseAllChildren (traverseAllChildren.js:157)
at flattenChildren (flattenChildren.js:52)
at ReactDOMComponent._reconcilerUpdateChildren (ReactMultiChild.js:209)
at ReactDOMComponent._updateChildren (ReactMultiChild.js:315)
Hier ist der Quellcode Reagieren wo es versagt:
return ('' + keySubstring).replace(unescapeRegex, function (match) {
return unescaperLookup[match];
});
und im Kontext:
/**
* Unescape and unwrap key for human-readable display
*
* @param {string} key to unescape.
* @return {string} the unescaped key.
*/
function unescape(key) {
var unescapeRegex = /(=0|=2)/g;
var unescaperLookup = {
'=0': '=',
'=2': ':'
};
var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);
return ('' + keySubstring).replace(unescapeRegex, function (match) {
return unescaperLookup[match];
});
}
Dies ist wahrscheinlich indikativ, dass ich irgendwo Reagieren in meinem Code missbrauche, aber da das Stacktrace keine Verweise auf meinen eigenen Code enthält, bin ich mir nicht sicher, wonach ich suchen soll. Es scheint eine Endlosschleife des erneuten Renderns zu sein, und ich bin verdächtig, dass es möglicherweise auf einen falsch platzierten Aufruf von setState
zurückzuführen ist.
Die Frage
wahrscheinlich mein Verdacht ist? Wie kann ich dieses Problem weiter diagnostizieren, da meine eigene Codebasis ziemlich umfangreich ist? Was bedeutet es, dass dies in KeyEscapeUtils fehlgeschlagen ist?
Können Sie angeben, wo diese Funktion verwendet wird, idealerweise die gesamte Komponente, die sie verwendet? Die Quelle des Fehlers ist höchstwahrscheinlich höher. –