?✨ 在現代 JavaScript 和 React 應用程式中,經常會遇到由於存取未定義或空值的屬性,或呼叫未定義的陣列或物件的方法而導致的執行時間錯誤。這些問題可能會破壞用戶體驗並使調試成為一場噩夢。在本文中,我們將識別常見問題並提供 ESLint 配置來有效緩解這些問題。 ??
? ✨ 在我們的 React 或 React Native 專案中,因為我們不使用 TypeScript,所以有時我們會忘記寫安全程式碼。這些不安全的程式碼可能會導致生產中的許多問題,例如 React Native 應用程式崩潰、讓用戶感到沮喪以及使維護變得複雜。讓我們深入探討這些常見問題以及如何解決它們。 ???
存取未定義或 null 的物件上的屬性會導致執行階段錯誤:
const user = undefined; console.log(user.name); // ❌ Runtime Error: Cannot read property 'name' of undefined
const name = user?.name;
const name = user ? user.name : 'Default Name';
const user = { name: 'Default Name' };
在未定義的陣列上呼叫 .map() 或 .filter() 等方法會引發錯誤:
const items = undefined; items.map((item) => console.log(item)); // ❌ Runtime Error: Cannot read property 'map' of undefined
if (Array.isArray(items)) { items.map(item => console.log(item)); }
const items = someValue || []; items.map(item => console.log(item));
const items = possibleItems ?? [];
嘗試呼叫可能未定義的函數:
const handler = undefined; handler(); // ❌ Runtime Error: handler is not a function
if (typeof handler === 'function') { handler(); }
const handler = passedHandler || (() => {});
從未定義的物件解構屬性會導致錯誤:
const user = undefined; console.log(user.name); // ❌ Runtime Error: Cannot read property 'name' of undefined
const name = user?.name;
const name = user ? user.name : 'Default Name';
存取未定義陣列的元素會導致錯誤:
const user = { name: 'Default Name' };
const items = undefined; items.map((item) => console.log(item)); // ❌ Runtime Error: Cannot read property 'map' of undefined
if (Array.isArray(items)) { items.map(item => console.log(item)); }
對未定義的值或物件使用 .map() 或 .filter() 等陣列方法:
const items = someValue || []; items.map(item => console.log(item));
const items = possibleItems ?? [];
const handler = undefined; handler(); // ❌ Runtime Error: handler is not a function
未能嚴格驗證條件可能會導致錯誤,例如依賴虛假值。例如,如果期望布林值的條件可能會錯誤地評估其他類型,例如未定義或0:
if (typeof handler === 'function') { handler(); }
const handler = passedHandler || (() => {});
const obj = undefined; const { name } = obj; // ❌ Runtime Error: Cannot destructure property 'name' of undefined
const { name = 'Default Name' } = user || {};
為了在開發過程中捕捉這些問題,我們可以利用具有特定規則的 ESLint。下面是一個 ESLint 配置,它將標記不安全的呼叫並建議修復。 ??️??
將以下規則新增至您的 .eslintrc.js 或 ESLint 設定檔:
const user = undefined; console.log(user.name); // ❌ Runtime Error: Cannot read property 'name' of undefined
要啟用這些規則,請確保您安裝了必要的 ESLint 外掛程式和解析器:
const name = user?.name;
將以下內容加入您的settings.json:
const name = user ? user.name : 'Default Name';
新增 npm 腳本來執行 ESLint:
const user = { name: 'Default Name' };
然後,執行 npm run lint 來捕捉問題。 ?
透過實作上述 ESLint 規則和實踐,您可以在不安全呼叫變成運行時錯誤之前捕獲並修復它們。 ??這種方法將提高 JavaScript 和 React 專案的可靠性和可維護性。 ⚙️✨
以上是使用 ESLint 避免 JavaScript 和 React 專案中的不安全調用的詳細內容。更多資訊請關注PHP中文網其他相關文章!