[英]How to let react electron ignore undefined error?
注意
我認為解決方案是使用反應錯誤邊界 ,如控制台中所建議的那樣。
您已經指出您正在使用錯誤邊界,因此在使用此小提琴測試您的方案后,我認為您的實現可能不正確。
給出了文檔中ErrorBoundary
的類似實現:
class ErrorBoundary extends React.Component {
state = { hasError: '' };
render() {
return this.state.hasError ? (
<span>Oops! Something went wrong:<br />{this.state.hasError}</span>
) : this.props.children;
}
}
ErrorBoundary.getDerivedStateFromError = (error) => ({ hasError: error.toString() });
該組件將呈現回落時,其所有子打破。
錯誤邊界是React組件,它們在其子組件樹中的任何位置捕獲JavaScript錯誤,記錄這些錯誤並顯示回退UI
它看起來類似於:
<MyReactApp>
<ErrorBoundary>
<ChatContent />
</ErrorBoundary>
</MyReactApp>
現在,在任何錯誤ChatContent
將漁獲ErrorBoundary
讓您有機會來呈現,如回退:
Oops! Something went wrong:
ReferenceError: test is not defined
這是很難提供一個回答你的問題,因為我沒有看到你的項目代碼,但如果你的反應的版本是16,你可以使用一個特殊組件的生命周期方法,它的名字是componentDidCatch
。
在此方法中,您將擁有以下值:
componentDidCatch(error, info) {
// Do something with error and info
}
即使你可以在這個方法中使用setState
並顯示你想要的。 我認為這種方法可以幫助您滿足您的第二個願望,即Web視圖中的打印error
。
代碼有很多A.test,如果(A)A.test,我不能寫每個地方
但為什么? 您可以使用某些編輯器進行多文件編輯。 所以,你可以替換A.test()
來safeTest(A)
功能。
export const safeTest = (Obj) => {
if (Obj) {
Obj.test();
} else {
// Any action you want
}
}
我傾向於使用默認道具 。 如果在未定義的情況下傳遞prop,則可以為要分配給prop的組件設置一個值。 例如,如果組件依賴於嵌套在對象中的數組,則默認情況下可以將該值設置為空數組。 當您的組件依賴於API調用的結果數組時,這尤其方便,但組件在請求完成之前呈現。
如果你想盡可能少地捕獲 Electron中主要和渲染器進程中的所有未處理錯誤 ,並通過對話框向用戶顯示它們 ,那么簡單的方法就是使用電子未處理的錯誤來完成:
安裝它( npm i electron-unhandled
)之后,在你的主文件和渲染器條目文件(可能是它們的根index.js
)中,你只需要在開頭添加:
const unhandled = require('electron-unhandled');
unhandled({ showDialog: true });
現在,正如所說的那樣,使用全局錯誤捕獲器是一個好習慣,但如果只使用它,那就非常糟糕。 您應該嘗試更准確地覆蓋錯誤處理,至少方法是:
.then() { ... }.catch(err => ...)
為你的承諾, (..., (err, res) => { if (err !== null) { ... } ... )
為你的回調, await
的代碼部分try { ... } catch(err) { ... }
。 而且,作為附注,我自己創建了一個依賴性庫 ,以便安全,輕松地創建全局錯誤字典,以便很好地組織您的錯誤,但如果這個不適合您的需求,還有其他選擇。
我想最好的解決辦法是圍繞你的A.test
try
和catch
。 在這種情況下,你可以做的是catch
錯誤是A
是null
並從你的身邊執行一些錯誤頁面你想要它或只是保持錯誤沉默,因為你不想執行任何操作並抑制錯誤並繼續執行。
您還可以使用try-catch
將A.test
包裝在一個函數中,並使用該函數代替A.test
。 通過這種方式,您可以避免多個try-catch
塊,並且可以根據您的要求處理錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.