ReFormX:現代化的 React 表單解決方案 - 深度解析與最佳實踐

ReFormX文檔

表單開發一直是前端工作中最繁瑣卻又最常見的任務之一。從簡單的登錄表單到復雜的多步驟配置頁面,開發者往往需要編寫大量重復代碼,處理繁瑣的狀態管理、數據驗證和聯動邏輯。ReFormX 應運而生,它不僅是一個表單組件庫,更是一套完整的表單開發解決方案,致力于從根本上改變前端表單開發的方式。

1. 項目介紹

ReFormX 是一個基于 React 和 Ant Design 的動態表單生成器,旨在通過配置驅動的方式簡化表單開發流程。它提供了豐富的組件類型、靈活的布局方式和強大的表單聯動能力,能夠滿足各種復雜的業務場景需求。

在傳統的 React 表單開發中,我們通常需要:

  • 為每個表單項定義狀態
  • 編寫變更處理函數
  • 實現表單驗證邏輯
  • 處理表單項之間的聯動關系

而使用 ReFormX,這些繁瑣的工作都可以通過一份配置完成,大大提高了開發效率。

2. 核心設計理念

2.1 配置驅動開發

ReFormX 的核心是"配置驅動"的理念,即通過聲明式配置文件定義表單的結構、校驗規則和聯動邏輯,而不是手動編寫命令式代碼。這種方式有幾個顯著優勢:

  • 降低心智負擔:開發者只需關注表單的結構和業務邏輯,無需關注底層實現
  • 提高可維護性:配置文件清晰易讀,便于團隊協作和后期維護
  • 減少重復代碼:避免編寫大量樣板代碼,提高開發效率

以下是一個基本的配置示例:

export const formConfig: IFormConfig = {groups: [{layout: "custom",items: [{ type: "input", name: "username", label: "用戶名",rules: [{ required: true, message: "請輸入用戶名" }]},{type: "password",name: "password",label: "密碼",rules: [{ required: true, message: "請輸入密碼" },{ min: 8, message: "密碼長度不能少于8位" }]}]}]
};

這個簡單的配置就能生成一個包含用戶名和密碼字段的表單,并自動包含表單驗證功能。

2.2 組件化設計

ReFormX 采用模塊化的組件設計,主要包括以下幾類組件:

基礎組件

ReFormX 集成了 Ant Design 的全套表單組件,包括但不限于:

  • Input(輸入框)
  • Select(選擇器)
  • DatePicker(日期選擇器)
  • TimePicker(時間選擇器)
  • Radio(單選框)
  • Checkbox(復選框)
  • Switch(開關)
  • Upload(上傳組件)

這些組件都經過了封裝,可以直接通過配置使用,無需額外的處理邏輯。

布局組件

除了基礎的表單項組件,ReFormX 還提供了多種布局組件,使表單展示更加靈活:

  • Grid(柵格布局):支持響應式的多列布局
  • Tabs(標簽頁):將表單內容分組展示
  • Steps(步驟條):適用于分步驟填寫的表單
  • Collapse(折疊面板):可折疊的內容區域
  • Card(卡片):帶邊框的內容容器

通過組合使用這些布局組件,可以構建出復雜而清晰的表單界面。

自定義組件

對于特定業務場景,ReFormX 提供了擴展機制,允許開發者注冊自定義組件:

import { registerFormComponent } from 'reformx';// 注冊自定義組件
registerFormComponent('user-selector', UserSelector);// 在配置中使用
const config = {type: 'user-selector',name: 'assignee',label: '負責人'
};

這種擴展機制確保了 ReFormX 能夠適應各種復雜的業務需求。

2.3 強大的聯動機制

表單聯動是實際業務中的常見需求,例如根據一個字段的值決定另一個字段的顯示狀態或可選項。ReFormX 提供了強大而靈活的聯動機制:

值聯動

通過依賴追蹤,可以根據其他字段的值動態設置某個字段的值:

{type: "input",name: "displayName",label: "顯示名稱",value: (values) => values.firstName + ' ' + values.lastName,deps: ["firstName", "lastName"]
}
顯示/隱藏聯動

根據條件控制字段的顯示與隱藏:

{type: "select",name: "pickupStore",label: "自提門店",visible: (values) => values.deliveryType === "self",visibleDeps: ["deliveryType"],options: [{ label: "北京店", value: "bj" },{ label: "上海店", value: "sh" }]
}
異步數據聯動

支持異步獲取數據,適用于下拉選項需要從服務器獲取的場景:

{type: "select",name: "city",label: "城市",fetchOptions: async (values) => {if (!values.province) return [];const response = await fetch(`/api/cities?province=${values.province}`);const data = await response.json();return data.map(item => ({ label: item.name, value: item.code }));},deps: ["province"]
}

這種靈活的聯動機制,使得 ReFormX 能夠處理各種復雜的表單交互需求。

3. 技術優勢

3.1 顯著提升開發效率

ReFormX 的配置式開發方式,極大地提高了表單開發的效率:

  • 減少重復代碼:告別冗長的模板代碼和狀態管理邏輯
  • 快速迭代:修改配置即可實現功能調整,無需大量修改代碼
  • 團隊協作:配置文件易于理解和維護,降低團隊協作成本

對于一個包含 20 個字段的復雜表單,使用傳統方式可能需要 500+ 行代碼,而使用 ReFormX 只需約 100 行配置,節省了約 80% 的開發工作量。

3.2 功能完備性

ReFormX 提供了全面的表單功能支持:

多種表單布局

從簡單的單列布局到復雜的多標簽頁、分步表單、響應式柵格,ReFormX 都能輕松實現:

// 柵格布局示例
{layout: "grid",cols: { xs: 24, sm: 12, md: 8, lg: 6 },items: [// 表單項定義]
}// 標簽頁布局示例
{layout: "tabs",tabs: [{ key: "basic", tab: "基本信息", items: [] },{ key: "advanced", tab: "高級設置", items: [] }]
}
強大的校驗能力

表單驗證是確保數據質量的關鍵環節。ReFormX 集成了 Ant Design 的驗證機制,同時擴展了更多實用功能:

  • 支持所有常見驗證類型(必填、長度、格式等)
  • 支持自定義驗證函數
  • 支持異步驗證(如檢查用戶名是否已存在)
  • 支持聯動驗證(基于其他字段值的驗證規則)
{type: "input",name: "email",label: "郵箱",rules: [{ required: true, message: "請輸入郵箱" },{ type: "email", message: "請輸入有效的郵箱地址" },{validator: async (_, value) => {if (!value) return Promise.resolve();const response = await fetch(`/api/check-email?email=${value}`);const data = await response.json();if (data.exists) {return Promise.reject("該郵箱已被注冊");}return Promise.resolve();}}]
}
性能優化

對于大型表單,性能是一個關鍵考量。ReFormX 在設計時特別注重性能優化:

  • 依賴追蹤優化:只有當依賴項變化時才重新渲染相關組件
  • 按需加載組件:通過動態導入減少初始加載體積
  • 虛擬化渲染:對于超長表單,支持虛擬化渲染以提高性能
  • Tree-shaking 支持:優化打包體積,減少不必要的代碼引入

這些優化措施確保了即使在大型復雜表單場景下,ReFormX 也能保持流暢的用戶體驗。

3.3 TypeScript 支持

ReFormX 使用 TypeScript 開發,提供了完善的類型定義,帶來了多重好處:

  • 開發時的智能提示,減少配置錯誤
  • 類型檢查確保配置的正確性
  • 更好的代碼重構和維護體驗
  • 配置結構清晰,易于理解
// ReFormX 的類型定義示例
interface IFormItemConfig {type: string;name: string;label?: string;rules?: Rule[];visible?: boolean | ((values: any) => boolean);visibleDeps?: string[];// 更多屬性...
}interface IFormGroupConfig {layout: 'default' | 'grid' | 'tabs' | 'steps' | 'custom';items: IFormItemConfig[];// 根據 layout 類型的不同,可能有其他特定屬性
}interface IFormConfig {groups: IFormGroupConfig[];initialValues?: Record<string, any>;// 其他全局配置...
}

4. 實際應用場景

ReFormX 的靈活性使其適用于各種表單場景:

4.1 后臺管理系統

后臺管理系統通常包含大量的表單頁面,如用戶管理、權限配置、內容管理等。使用 ReFormX 可以:

  • 統一表單組件和交互風格
  • 減少重復開發工作
  • 方便后期維護和功能擴展

4.2 數據采集表單

針對問卷調查、數據收集等場景,ReFormX 提供了豐富的組件和布局選擇,同時支持條件邏輯和跳轉規則,滿足復雜的數據采集需求。

4.3 動態配置頁面

對于需要頻繁調整的配置頁面,可以將表單配置存儲在數據庫中,通過接口動態獲取配置并渲染表單,實現真正的動態表單:

import { DynamicForm } from 'reformx';const DynamicConfigPage = () => {const [config, setConfig] = useState(null);useEffect(() => {// 從后端獲取表單配置fetch('/api/form-configs/system-settings').then(res => res.json()).then(data => setConfig(data));}, []);if (!config) return <Loading />;return <DynamicForm config={config} onSubmit={handleSubmit} />;
};

4.4 復雜業務表單

在金融、電商、企業服務等領域,常有復雜的業務表單,如貸款申請、商品上架、項目配置等。這些表單通常具有以下特點:

  • 字段數量多(幾十甚至上百個字段)
  • 聯動邏輯復雜
  • 驗證規則嚴格
  • 布局結構復雜

ReFormX 的配置驅動方式和強大的聯動機制,使其成為處理此類復雜表單的理想選擇。

5. 高級特性與最佳實踐

5.1 表單模板與復用

對于常見的表單結構,可以創建可復用的模板:

// 創建地址信息模板
const addressTemplate = {type: 'group',items: [{ type: 'input', name: 'province', label: '省份' },{ type: 'input', name: 'city', label: '城市' },{ type: 'input', name: 'district', label: '區縣' },{ type: 'textarea', name: 'detailAddress', label: '詳細地址' }]
};// 在表單中復用模板
const orderFormConfig = {groups: [// 其他表單組{layout: 'default',title: '收貨地址',// 復用地址模板,并添加前綴items: addressTemplate.items.map(item => ({...item,name: `shipping_${item.name}`}))},{layout: 'default',title: '賬單地址',// 再次復用,使用不同前綴items: addressTemplate.items.map(item => ({...item,name: `billing_${item.name}`}))}]
};

5.2 性能優化策略

對于特別復雜的表單,可以采用一些性能優化措施:

分組渲染

將大型表單拆分為多個獨立渲染的區域,減少單次渲染的組件數量:

// 分組渲染示例
const ComplexForm = () => {return (<div><DynamicFormconfig={basicInfoConfig}form={form}name="basicInfo"/><DynamicFormconfig={detailConfig}form={form}name="details"/><DynamicFormconfig={settingsConfig}form={form}name="settings"/></div>);
};
延遲加載

對于不是立即可見的表單部分(如標簽頁中的內容),可以配置延遲加載:

{layout: "tabs",lazyLoad: true, // 啟用延遲加載tabs: [{ key: "basic", tab: "基本信息", items: [] },{ key: "advanced", tab: "高級設置", items: [] }]
}

5.3 與后端集成

ReFormX 可以與后端系統緊密集成,實現更加強大的功能:

動態表單定義

從后端獲取表單配置,實現表單的動態定義和更新:

// 從后端獲取表單配置
const fetchFormConfig = async (formId) => {const response = await fetch(`/api/form-definitions/${formId}`);return response.json();
};// 使用動態配置
const DynamicFormPage = ({ formId }) => {const [config, setConfig] = useState(null);useEffect(() => {fetchFormConfig(formId).then(setConfig);}, [formId]);if (!config) return <Loading />;return <DynamicForm config={config} />;
};
表單數據處理

對于復雜的數據處理邏輯,可以在提交前對表單數據進行轉換:

const handleSubmit = (values) => {// 轉換表單數據為API所需格式const transformed = transformFormData(values);// 提交到APIapi.submitForm(transformed).then(response => {// 處理響應});
};<DynamicFormconfig={config}onSubmit={handleSubmit}
/>

6. 快速開始

6.1 安裝

npm install reformx
# 或
yarn add reformx

6.2 基礎使用

創建一個簡單的表單:

import React from 'react';
import { DynamicForm } from 'reformx';// 表單配置
const formConfig = {groups: [{layout: 'default',items: [{ type: 'input', name: 'name', label: '姓名', rules: [{ required: true, message: '請輸入姓名' }] },{ type: 'input', name: 'email', label: '郵箱', rules: [{ type: 'email', message: '請輸入有效的郵箱' }] },{ type: 'select', name: 'gender', label: '性別', options: [{ label: '男', value: 'male' },{ label: '女', value: 'female' }]},{ type: 'datePicker', name: 'birthday', label: '出生日期' }]}]
};// 使用表單
const App = () => {const handleSubmit = (values) => {console.log('表單提交:', values);// 處理表單提交};return (<div style={{ padding: 24 }}><h1>用戶信息</h1><DynamicFormconfig={formConfig}onSubmit={handleSubmit}/></div>);
};export default App;

6.3 高級配置

使用更復雜的表單布局和聯動:

const advancedConfig = {groups: [{layout: 'tabs',tabs: [{key: 'basic',tab: '基本信息',items: [{ type: 'input', name: 'name', label: '姓名' },{ type: 'input', name: 'phone', label: '電話' }]},{key: 'address',tab: '地址信息',items: [{layout: 'grid',cols: { xs: 24, sm: 12 },items: [{ type: 'input', name: 'province', label: '省份' },{ type: 'input', name: 'city', label: '城市' }]},{ type: 'textarea', name: 'address', label: '詳細地址' }]}]},{layout: 'default',title: '配送方式',items: [{type: 'radio',name: 'deliveryType',label: '配送方式',options: [{ label: '快遞配送', value: 'express' },{ label: '到店自提', value: 'self' }]},{type: 'select',name: 'expressCompany',label: '快遞公司',visible: (values) => values.deliveryType === 'express',visibleDeps: ['deliveryType'],options: [{ label: '順豐速運', value: 'sf' },{ label: '中通快遞', value: 'zt' },{ label: '圓通速遞', value: 'yt' }]},{type: 'select',name: 'store',label: '自提門店',visible: (values) => values.deliveryType === 'self',visibleDeps: ['deliveryType'],fetchOptions: async () => {// 模擬異步獲取門店列表await new Promise(resolve => setTimeout(resolve, 1000));return [{ label: '北京中關村店', value: 'bj001' },{ label: '北京國貿店', value: 'bj002' },{ label: '上海徐家匯店', value: 'sh001' }];}}]}]
};

7. 未來規劃

ReFormX 團隊的未來規劃包括:

7.1 更豐富的組件生態

  • 擴展更多專業領域的表單組件
  • 更多布局組件支持
  • 第三方組件庫集成(如 ECharts、CodeMirror 等)

7.2 可視化配置工具

開發表單設計器,實現拖拽式表單設計,進一步提升開發效率:

  • 組件拖拽配置
  • 屬性面板編輯
  • 實時預覽效果
  • 配置代碼導出

7.3 表單模板市場

建立表單模板共享市場,讓開發者可以:

  • 發布和分享優秀的表單模板
  • 復用常見業務場景的表單設計
  • 減少從零開始的開發工作

7.4 性能優化

持續優化大型表單的性能表現:

  • 虛擬滾動優化
  • 懶加載機制完善
  • 狀態管理優化
  • 渲染性能提升

7.5 跨平臺適配

擴展對更多平臺的支持:

  • 移動端適配優化
  • 微信小程序版本
  • React Native 支持

8. 總結

ReFormX 不僅是一個表單組件庫,更是一種新的表單開發范式。它通過配置驅動的方式,徹底改變了傳統的表單開發流程,使開發者能夠專注于業務邏輯,而不是繁瑣的狀態管理和組件編寫。

核心優勢總結:

  • 配置驅動:聲明式開發,減少重復代碼
  • 組件豐富:內置多種表單組件和布局方式
  • 強大聯動:靈活的字段聯動和異步數據處理
  • 類型支持:完善的 TypeScript 類型定義
  • 擴展性強:支持自定義組件和驗證規則
  • 性能優化:針對大型表單的各種優化措施

通過 ReFormX,我們可以顯著提升表單開發的效率,減少重復工作,提高代碼質量,最終為用戶提供更好的產品體驗。

無論是簡單的登錄表單,還是復雜的企業級應用表單,ReFormX 都能夠滿足需求,是現代 React 應用表單開發的理想選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75765.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WinForm真入門(9)——RichTextBox控件詳解

WinForm中RichTextBox控件詳解&#xff1a;從基礎到高級應用 上一文中筆者重點介紹了TextBox控件的詳細用法&#xff0c;忘記的 請點擊WinForm真入門(8)——TextBox控件詳解&#xff0c;那么本文中的RichTextBox與TextBox有什么區別嗎&#xff0c;光看名字的話&#xff0c;多了…

Draw.io 全面解析與競品分析:圖表繪制工具的深度對比

目錄 一、Draw.io 全面介紹 1. 產品概述 2. 核心功能特點 3. 用戶體驗 4. 商業模式 二、市場競品分析 1. 主要競品概覽 2. 深度功能對比 3. 價格策略對比 4. 技術架構對比 三、用戶場景與選擇建議 1. 不同場景下的工具推薦 2. 未來發展趨勢 四、結論 diagrams.net…

kafka分區策略詳解

Kafka 分區策略詳解 Kafka 的分區策略決定了消息在生產者端如何分配到不同分區&#xff0c;以及在消費者端如何動態分配分區以實現負載均衡。以下是 Kafka 核心分區策略及其適用場景的詳細解析&#xff1a; 1、生產者分區策略 生產者負責將消息發送到 Topic 的特定分區&#…

C++ STL 詳解 ——list 的深度解析與實踐指南

在 C 的標準模板庫&#xff08;STL&#xff09;中&#xff0c;list作為一種重要的序列式容器&#xff0c;以其獨特的雙向鏈表結構和豐富的操作功能&#xff0c;在許多編程場景下發揮著關鍵作用。深入理解list的特性與使用方法&#xff0c;能幫助開發者編寫出更高效、靈活的代碼…

GenerationMixin概述

類 類名簡單說明GenerateDecoderOnlyOutput繼承自 ModelOutput&#xff0c;適用于非束搜索方法的解碼器-only模型輸出類。GenerateEncoderDecoderOutput繼承自 ModelOutput&#xff0c;適用于非束搜索方法的編碼器-解碼器模型輸出類。GenerateBeamDecoderOnlyOutput繼承自 Mod…

【備賽】藍橋杯嵌入式實現led閃爍

原理 由于藍橋杯的板子帶有鎖存器&#xff0c;并且與lcd屏幕有沖突&#xff0c;所以這個就成了考點。 主要就是用定時器來實現&#xff0c;同時也要兼顧lcd的沖突。 一、處理LCD函數 首先來解決與lcd屏幕沖突的問題&#xff0c;把我們所有用到的lcd函數改裝一下。 以下是基…

C++ 并發性能優化實戰:提升多線程應用的效率與穩定性

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;獲得2024年博客之星榮譽證書&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開發技術&#xff0c…

Python----計算機視覺處理(Opencv:道路檢測之車道線擬合)

完整版&#xff1a; Python----計算機視覺處理&#xff08;Opencv:道路檢測完整版&#xff1a;透視變換&#xff0c;提取車道線&#xff0c;車道線擬合&#xff0c;車道線顯示&#xff09; 一、獲取左右車道線的原始位置 導入模塊 import cv2 import numpy as np from matplot…

優選算法的妙思之流:分治——歸并專題

專欄&#xff1a;算法的魔法世界 個人主頁&#xff1a;手握風云 目錄 一、歸并排序 二、例題講解 2.1. 排序數組 2.2. 交易逆序對的總數 2.3. 計算右側小于當前元素的個數 2.4. 翻轉對 一、歸并排序 歸并排序也是采用了分治的思想&#xff0c;將數組劃分為多個長度為1的子…

C語言查漏補缺:基礎篇

1.原理 C語言是一門編譯型計算機語言&#xff0c;要編寫C代碼&#xff0c;C源代碼文本文件本身無法直接執行&#xff0c;必須通過編譯器翻譯和鏈接器的鏈接&#xff0c;生成二進制的可執行文件&#xff0c;然后才能執行。這里的二進制的可執行文件就是我們最終要形成的可執行程…

TPS入門DAY02 服務器篇

1.創建空白插件 2.導入在線子系統以及在線steam子系統庫 MultiplayerSessions.uplugin MultiplayerSessions.Build.cs 3.創建游戲實例以及初始化會話創建流程 創建會話需要的函數&#xff0c;委托&#xff0c;委托綁定的回調&#xff0c;在線子系統接口綁定某一個委托的控制其…

產品經理課程

原型工具 一、土耳其機器人 這個說法來源于 1770 年出現的一個騙局&#xff0c;一個叫沃爾夫岡馮肯佩倫&#xff08;Wolfgang von Kempelen&#xff09;的人為了取悅奧地利女皇瑪麗婭特蕾莎&#xff08;Maria Theresia&#xff09;&#xff0c;“制造”了一個會下國際象棋的機…

nginx中的limit_req 和 limit_conn

在 Nginx 中&#xff0c;limit_req 和 limit_conn 是兩個用于限制客戶端請求的指令&#xff0c;它們分別用于限制請求速率和并發連接數。 limit_req limit_req 用于限制請求速率&#xff0c;防止客戶端發送過多請求影響服務器性能。它通過 limit_req_zone 指令定義一個共享內存…

基于winform的串口調試助手

目錄 一、串口助手界面設計 1.1 串口配置 1.2 接收配置 1.3 發送配置 1.4 接收窗口和發送窗口 1.5 狀態顯示窗口 1.6 串口通訊控件 二、程序編寫 2.1 端口號自動識別并顯示在端口號下拉框 功能說明&#xff1a; 2.2 波特率下拉框顯示 2.3 數據位下拉框顯示 2.4 校…

Docker基礎2

如需轉載&#xff0c;標記出處 本次我們將下載一個 Docker 鏡像&#xff0c;從鏡像中啟動容器 上一章&#xff0c;安裝 Docker 時&#xff0c;獲得兩個主要組件&#xff1a; Docker 客戶端 Docker 守護進程&#xff08;有時稱為“服務器”或“引擎”&#xff09; 守護進程實…

Rocketmq2

一、生產者端防丟失 1. 發送方式選擇 同步發送&#xff1a;使用 send() 方法&#xff0c;等待 Broker 確認響應&#xff08;SendResult&#xff09;&#xff0c;確保消息已成功發送。異步發送&#xff1a;使用 sendAsync() 方法并設置回調函數&#xff0c;處理發送成功 / 失敗…

RabbitMQ詳解,RabbitMQ是什么?架構是怎樣的?

目錄 一,RabbitMQ是什么? 二,RabbitMQ架構 2.1 首先我們來看下RabbitMQ里面的心概念Queue是什么? 2.2 交換器Exchange 2.3 RabbitMQ是什么? 2.4 重點看下優先級隊列是什么? 三,RabbitMQ集群 3.1 普通集群模式 3.2 鏡像隊列集群 一,RabbitMQ是什么? 假設我們程序…

【一步步開發AI運動APP】六、運動計時計數能調用

之前我們為您分享了【一步步開發AI運動小程序】開發系列博文&#xff0c;通過該系列博文&#xff0c;很多開發者開發出了很多精美的AI健身、線上運動賽事、AI學生體測、美體、康復鍛煉等應用場景的AI運動小程序&#xff1b;為了幫助開發者繼續深耕AI運動領域市場&#xff0c;今…

MySQL——DQL的多表查詢

一、交叉連接 標準語法&#xff1a;select * from 表1 cross join 表2 where 表1.公共列 表2.公共列; 簡單語法&#xff1a;select * from 表1 , 表2 where 表1.公共列 表2.公共列; 公共列&#xff1a;兩張表具有相同含義的列&#xff0c;不是列名一樣。 …

【Linux內核】如何更加優雅閱讀Linux內核源碼(vscode)

1. 前言 因為已經習慣在Ubuntu下進行嵌入式工作開發&#xff0c;但Linux源碼在Source Insight下進行閱讀&#xff0c;一直很苦惱Linux/Windows來回切換的開發方式&#xff0c;當前發現可以通過 vscode clangd(擴展組件) 方式進行更好的內核源碼閱讀。 2. 環境 操作系統&…