<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      VS Code 操作 “Delete unused imports” 時,不刪除 React 導入

      問題

      使用 Delete unused imports 操作時,同時刪掉了 import React from 'react';

      iShot_2025-09-12_14.14.27

      為什么不能刪掉呢?因為代碼 push 到遠程倉庫后會走 CI 流程, CI 流程里有代碼檢查節點進行 ESLint 檢查

      image

      CI 節點的 ESLint 規則開發者無法修改或者覆蓋。其中有一條規則是

      {
          "react/react-in-jsx-scope": "error"
      }
      

      它表示當 ESLint 檢測到 JSX 代碼但 React 沒有被正確引入時,會報錯。在 React 17+ 版本中,引入了新的 JSX 轉換方式,可以不需要顯式引入 React。為什么這條規則仍然存在,因為有大量使用低版本 React 的倉庫需要兼容。

      接下來我們要做的是:

      1. 保持 tsx 文件中存在 import React from 'react';
      2. 保持 delete unused imports 時,它不會被刪掉

      尋找原因

      把鼠標放到 Button 上,顯示了 2 條被檢測出來的錯誤,一條 ESLint 檢測出的,另一條是 TypeScript 的。

      image

      把鼠標放到 React 上,只顯示了 1 條被檢測出來的錯誤,是 TypeScript 的。

      image

      這表明使用 Delete unused imports 操作時,是 TypeScript 進行了刪除操作, TypeScript 認為 React 是不必導入的, React 被 TypeScript 識別為未使用的變量。現在我們了解到我們要從 typescript 層面解決這個問題,可能跟 tsconfig 有關。

      為什么這里沒有拋出 ESLint 錯誤呢?因為此倉庫的 ESLint 配置與 CI 代碼檢查節點的 ESLint 規則是相同的, 這樣在出現 ESLint 錯誤時,本地開發使用的編輯器才能給出錯誤或警告。由于規則集中包含了

      {
          "react/react-in-jsx-scope": "error"
      }
      

      所以此處就不會有 ESLint 錯誤拋出了。

      為什么 React 17- 必須 React Must Be in Scope

      由于 JSX 編譯為對 React.createElement 的調用,因此 React 庫也必須始終在 JSX 代碼的范圍內。例如:

      const element = <div>Hello</div>;
      
      // React 17 及之前編譯為
      const element = React.createElement("div", null, "Hello");
      

      關鍵點?是編譯后的代碼直接調用了 React.createElement(),因此 React必須是一個已定義的變量。

      React 17 引入了新的 JSX 轉換(New JSX Transform),不再需要手動導入 React:

      function Component() {
        return <div>Hello</div>; // React 17+ 配合新 JSX 轉換, 編譯為 _jsxRuntime.jsx(...),無需 React
      }
      

      新轉換會從 react/jsx-runtime 自動導入 jsx 或 jsxs 函數,不再依賴 React.createElement。簡單說就是新 JSX 轉換可省略導入,但需配置工具鏈支持,相關工具在編譯階段幫我們做了。

      解決

      上面我們了解到使用 VS Code 的 Delete unused imports 操作時,是 TypeScript 進行了刪除操作,我們要讓 TypeScript 識別到 React 導入不是一個未被使用的變量。我們還了解了為什么 React 17 之前必須 React Must Be in Scope。

      接下來我們看看倉庫的 tsconfig

      {
        "extends": "./src/.umi/tsconfig.json"
      }
      

      使用了 "extends"屬性來繼承另一個配置文件,這是 umi 框架內置的 tsconfig,目前很多元框架都是這么做的。我們可以點跳轉過去,看看這個配置文件內容,只看相關的部分

      {
        "compilerOptions": {
          "jsx": "react-jsx",
        }
      }
      

      jsx 屬性控制JSX結構在JavaScript文件中的輸出方式。它還有以下值:

      • react-jsx:生成.js文件時將JSX轉換為針對生產環境優化的_jsx調用
      • react-jsxdev:生成.js文件時將JSX轉換為僅用于開發的_jsx調用
      • preserve:生成.jsx文件且保持JSX原樣不變
      • react-native:生成.js文件且保持JSX原樣不變
      • react:生成.js文件時將JSX轉換為等效的 React.createElement 調用

      框架內置的 jsx 被配置為 "react-jsx",這是正常的,因為當前版本的框架使用的 React 版本為 18,顯然,它不需要在 tsx 或 jsx 文件頂部導入 React 了。

      所以,我們就找到答案了,只要將 jsx 屬性的值改為 react 就可以解決這個問題。但是我們不能修改框架內置的配置文件,怎么辦呢?可以重新聲明此選項以覆蓋框架內置 tsconfig。

      {
        "extends": "./src/.umi/tsconfig.json",
        "compilerOptions": {
          "jsx": "react"
        }
      }
      

      驗證

      修改配置后,我們來重啟下 VS Code TS Server。

      image

      quick fix 菜單已經沒有 Delete unused imports 選項了,只有一個未使用變量 Button 被檢測到。

      image

      我們把鼠標放到 React 上查看是否還有未使用的 ts 錯誤拋出:

      image

      錯誤消失了。我們再導入一個變量驗證 Delete unused imports 是否會刪除 React 的導入。

      iShot_2025-09-12_15.12.37

      只刪除了未使用的變量, React 導入沒有被刪除,這樣問題就解決了。

      posted @ 2025-09-12 15:36  guangzan  閱讀(192)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产99re热这里只有精品| 婷婷丁香五月亚洲中文字幕| 国产超高清麻豆精品传媒麻豆精品| 亚洲人成色77777| 虎白女粉嫩尤物福利视频| 男女啪啪18禁无遮挡激烈| 涟水县| 精品黄色av一区二区三区| 国产小嫩模无套中出视频| 又爽又黄又无遮掩的免费视频| 国产一区二区三区色成人| 在线看免费无码的av天堂| 亚洲色大成网站WWW永久麻豆 | 国产真正老熟女无套内射| 777米奇影视第四色| 四虎成人精品国产永久免费| 中文字幕精品人妻丝袜| 熟女丰满老熟女熟妇| 国产精品第一页中文字幕| 国产成人久久综合一区| 大陆精大陆国产国语精品| 麻豆精品一区二区三区蜜臀 | 艳妇臀荡乳欲伦交换在线播放| 漂亮的保姆hd完整版免费韩国| 亚洲中文字幕久久精品品| 国产女高清在线看免费观看 | 亚洲av永久无码精品水牛影视| 国产亚洲999精品AA片在线爽| 自拍偷在线精品自拍偷免费| 熟妇的奶头又大又长奶水视频| 内射一区二区三区四区| 福利一区二区1000| 丝袜高潮流白浆潮喷在线播放| 亚洲午夜福利精品无码不卡| 国产成人无码A区在线观| 婷婷丁香五月亚洲中文字幕| 国产三级国产精品国产专| 亚洲国产成熟视频在线多多| 在线观看热码亚洲av每日更新| 亚洲情A成黄在线观看动漫尤物| 蜜桃av无码免费看永久|