国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解React 16 中的異常處理

2024-05-06 15:13:42
字體:
供稿:網(wǎng)友

詳解React 16 中的異常處理

異常處理

在 React 15.x 及之前的版本中,組件內(nèi)的異常有可能會(huì)影響到 React 的內(nèi)部狀態(tài),進(jìn)而導(dǎo)致下一輪渲染時(shí)出現(xiàn)未知錯(cuò)誤。這些組件內(nèi)的異常往往也是由應(yīng)用代碼本身拋出,在之前版本的 React 更多的是交托給了開發(fā)者處理,而沒有提供較好地組件內(nèi)優(yōu)雅處理這些異常的方式。在 React 16.x 版本中,引入了所謂 Error Boundary 的概念,從而保證了發(fā)生在 UI 層的錯(cuò)誤不會(huì)連鎖導(dǎo)致整個(gè)應(yīng)用程序崩潰;未被任何異常邊界捕獲的異常可能會(huì)導(dǎo)致整個(gè) React 組件樹被卸載。所謂的異常邊界即指某個(gè)能夠捕獲它的子元素(包括嵌套子元素等)拋出的異常,并且根據(jù)用戶配置進(jìn)行優(yōu)雅降級(jí)地顯示而不是導(dǎo)致整個(gè)組件樹崩潰。異常邊界能夠捕獲渲染函數(shù)、生命周期回調(diào)以及整個(gè)組件樹的構(gòu)造函數(shù)中拋出的異常。

我們可以通過為某個(gè)組件添加新的 componentDidCatch(error, info) 生命周期回調(diào)來使其變?yōu)楫惓_吔纾?/p>

class ErrorBoundary extends React.Component { constructor(props) {super(props);this.state = { hasError: false }; } componentDidCatch(error, info) {  // Display fallback UIthis.setState({ hasError: true });  // You can also log the error to an error reporting service  logErrorToMyService(error, info); } render() {if (this.state.hasError) {   // You can render any custom fallback UIreturn <h1>Something went wrong.</h1>;  }return this.props.children; }}

然后我們就可以如常使用該組件:

<ErrorBoundary><MyWidget /></ErrorBoundary>

componentDidCatch() 方法就好像針對(duì)組件的 catch {} 代碼塊;不過 JavaScript 中的 try/catch 模式更多的是面向命令式代碼,而 React 組件本身是聲明式模式,因此更適合采用指定渲染對(duì)象的模式。需要注意的是僅有類組件可以成為異常邊界,在真實(shí)的應(yīng)與開發(fā)中我們往往會(huì)聲明單個(gè)異常邊界然后在所有可能拋出異常的組件中使用它。另外值得一提的是異常邊界并不能捕獲其本身的異常,如果異常邊界組件本身拋出了異常,那么會(huì)冒泡傳遞到上一層最近的異常邊界中。

在真實(shí)地應(yīng)用開發(fā)中有的開發(fā)者也會(huì)將崩壞的界面直接展示給開發(fā)者,不過譬如在某個(gè)聊天界面中,如果在出現(xiàn)異常的情況下仍然直接將界面展示給用戶,就有可能導(dǎo)致用戶將信息發(fā)送給錯(cuò)誤的接受者;或者在某些支付應(yīng)用中導(dǎo)致用戶金額顯示錯(cuò)誤。因此如果我們將應(yīng)用升級(jí)到 React 16.x,我們需要將原本應(yīng)用中沒有被處理地異常統(tǒng)一包裹進(jìn)異常邊界中。譬如某個(gè)應(yīng)用中可能會(huì)分為側(cè)邊欄、信息面板、會(huì)話界面、信息輸入等幾個(gè)不同的模塊,我們可以將這些模塊包裹進(jìn)不同的錯(cuò)誤邊界中;這樣如果某個(gè)組件發(fā)生崩潰,會(huì)被其直屬的異常邊界捕獲,從而保證剩余的部分依然處于可用狀態(tài)。同樣的我們也可以在異常邊界中添加錯(cuò)誤反饋等服務(wù)接口以及時(shí)反饋生產(chǎn)環(huán)境下的異常并且修復(fù)他們。完整的應(yīng)用代碼如下所示:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 顺义区| 丰城市| 岗巴县| 泽州县| 胶南市| 洪洞县| 阳泉市| 项城市| 漳平市| 龙海市| 怀集县| 习水县| 新密市| 当涂县| 边坝县| 赤城县| 天祝| 揭阳市| 濮阳市| 枣庄市| 龙陵县| 余庆县| 景宁| 佛冈县| 喀喇| 方山县| 寿阳县| 美姑县| 安达市| 安阳县| 正阳县| 涟源市| 铜山县| 霍城县| 容城县| 泸定县| 肃宁县| 东安县| 鱼台县| 鄱阳县| 印江|