README 目錄
dynamic-form-kit-react (動態表單套件-react)
此專案僅用於展示。
如果需要實際應用的表單套件,請考慮持續發展的全面的表單套件作為表單元件庫,並且使用其他動態表單套件。
網站: dynamic-form-kit-react
概述
這是快速產生表單UI的React套件,使用typescript。
- 透過
Dynamic Form Setting(動態表單設定)產生Dynamic Form(動態表單),在IDE(VSCode)編輯時支援Intellisense。 - 透過指令產生
Static Form(靜態表單)檔案,其UI行為和Dynamic Form(動態表單)一致,並解除套件依賴。 - 透過
Dynamic Form Setting Editor(動態表單設定編輯器)產生Dynamic Form Setting(動態表單設定)。
概述圖:

語意列表
一般
| 語意 | 說明 |
|---|---|
Dynamic Form(動態表單) | 透過設定動態產生的表單元件的表單UI |
Static Form(靜態表單) | 表單元件是固定的, 而不是透過設定動態產生 |
Dynamic Form Setting(動態表單設定) | 設定動態表單, 包含設定各個資料欄位使用的表單元件及相關參數 |
套件元件
| 語意 | 說明 |
|---|---|
Dynamic Form Component Setting(動態表單元件設定) | 對於表單欄位設定表單元件 |
Dynamic Form Validator Setting(動態表單驗證器設定) | 對於表單欄位設定驗證器 |
Dynamic Form Builder(動態表單建造器) | 透過設定動態使用表單元件並產生表單UI的元件 |
Form Component Library(表單元件庫) | 一組表單元件的集中入口 |
套件使用者介面
| 語意 | 說明 |
|---|---|
Static Form Generator Commands(靜態表單產生器指令集) | 用於產生靜態表單的指令集 |
Dynamic Form Setting Editor(動態表單設定編輯器) | 編輯動態表單設定的UI |
Dynamic Form Setting Template(動態表單設定範本) | 對於動態表單設定的欄位設定的預設設定集合, 在編輯器中使用 |
套件架構
套件應用圖:

Dynamic Form Component Setting(動態表單元件設定):
語法說明
export const #objectName# = createDynamicFormComponentSetting<
#FormInterface#,
#ComponentLibraryObject(optional)#
>()((d) => ({
#fieldSettings(optional)#
}));
#fieldSettings(optional)#設定語法
每個欄位使用以下語法:
"#fieldName#": d({
componentName: #componentName#,
componentProps: #componentProps#
}),
以下支援 IntelliSense 自動提示:
#fieldName##componentName##componentProps#:元件屬性設定
自訂表單資料範例:

設定範例:

使用VS Code IntelliSense範例:

Dynamic Form Validator Setting(動態表單驗證器設定):
語法說明
const #objectName#: DynamicFormValidatorSetting<#FormInterface#> = {
#fieldSettings(optional)#
};
#fieldSettings(optional)#設定語法
每個欄位使用以下語法:
"#fieldName#": {
validator: (fieldValue, parentObject, fieldKey, form) => {
// 驗證邏輯 ...
return {
isError: boolean,
message: string
};
},
validGroupId?: string //驗證群組 ID(選填)
}
若多個欄位擁有相同的
validGroupId,當其中任一欄位觸發驗證時,該群組內所有欄位會同步執行驗證。
以下支援 IntelliSense 自動提示:
#fieldName#
設定範例:

使用VS Code IntelliSense範例:

Dynamic Form Builder(動態表單建造器):
語法說明
const #objectName# = <DynamicFormBuilder<#FormInterface#>
formData={...}
onChange={...}
componentSetting={...}
validatorSetting={...}
actionButtons={...} // 選填:提交、重置等動作按鈕設定
componentLibrary={...} // 選填:自訂元件庫
/>
簡易範例:

簡易範例介面:


Form Component Library(表單元件庫):
一組表單元件的集中入口.
內建表單元件庫.

自訂擴充表單元件庫
語法說明
const #objectName# = {
#customComponentName#: #componentDefinition#,
// ...more components
}
#objectName#: 自訂擴充表單元件庫名稱#customComponentName#: 作為此元件在整個自訂擴充表單元件庫中的唯一識別 ID, 在Dynamic Form Component Setting中使用
範例:

自訂表單元件
語法
export const #objectName# = createDynamicFormComponentForLib<#CustomComponentProps#>()({
component: #CustomComponent#,
props: {} as #CustomComponentProps#,
propsKeys: #keys for generator#,
demo: #DemoComponent#,
propsEditor: #PropsEditorComponent#, // 選填
icon: #icon# // 選填
})
| 欄位名稱 | 用途 | 必要 |
|---|---|---|
component | 實際用於渲染的 React 元件 | 是 |
props | 元件 Props 型別,用於 IntelliSense | 是 |
propsKeys | 用於Static Form生成的關鍵 props(如 value, onChange, validation) | 是 |
demo | 在 Dynamic Form Setting Editor中顯示的Demo元件 | 是 |
propsEditor | 自訂屬性編輯器,用於Dynamic Form Setting Editor中設定此元件的 Props | 選擇 |
icon | 自訂圖標,用於Dynamic Form Setting Editor顯示 | 選擇 |
propsEditor規格: 使用DynamicFormComponentStandardPropsEditor或DynamicFormComponentDynamicPropsTextEditor或是符合其型別的自訂React元件.
範例:

多語系:
語法
const getI18nLang_fromUrl = (): I18nLangType | null => { /* return I18nLangType|null */ };
const setI18nLang_toUrl = (lang: I18nLangType | null) => { /* custom code */ };
const TextProviderContent = () => {
const controller = useI18nController();
return <I18nTextProvider controller={controller}>
<#App# controller={controller} />
</I18nTextProvider>;
};
const ControllerProviderContent = () => {
return <I18nControllerProvider
useControllerHook={useDefaultI18nLangController}// 可替換成自訂的 useControllerHook
options={{
localStorageKey: '#custom key#',
defaultLang: "en", // 自訂
usingUrlLang: { getUrlLang: getI18nLang_fromUrl, setUrlLang: setI18nLang_toUrl } // 選用
}}
>
<TextProviderContent />
</I18nControllerProvider>;
};
| 區塊 | 說明用途 |
|---|---|
getI18nLang_fromUrl / setI18nLang_toUrl | 自訂從 URL 讀取或寫入語系,用於網址同步語言。 |
<I18nControllerProvider> | 建立全域 I18n 控制器(包含語系狀態、localStorage、URL 同步)。 |
useControllerHook | 指定使用的語系控制 Hook。 |
options.localStorageKey | 多語設定記錄在 localStorage的Key。 |
options.defaultLang | 預設語言, 使用I18nLangType的類型(e.g. "en")。 |
options.usingUrlLang | 可選,用於啟用網址語言同步機制。 |
<I18nTextProvider> | 提供實際文字對應 (字典查找))。 |
controller | 語系控制器,必須給I18nTextProvider, Dynamic Form Setting Editor, Static Form。 |
useControllerHook: 有預設的useDefaultI18nLangController可以使用.
範例:

Dynamic Form Setting Editor(動態表單設定編輯器):
使用編輯器:
使用<DynamicFormHome #componentLibMap(optional)# />使用編輯器.
#componentLibMap#為符合Map<string, ComponentLibForEditor>格式的物件. 使用getDefaultMapComponentLibForEditor()取得包含預設lib的libMap.
語法
const #objectName# = <DynamicFormHome
componentLibMap={#Component Library Map#}
langController={#II18nLangController#}
/>
#Component Library Map#: 為string對應到Form Component Library的Map物件#II18nLangController#: 為II18nLangController物件
範例:

Dynamic Form Setting Editor的UI說明:
- 在UI中查看
Static Form Generator Commands(靜態表單產生器指令集):
產生靜態表單指令:
npx gen-static-form --source "#source dir#" --target "#target dir#"
"#source dir#"是Dynamic Form Component Setting的來源的頂部資料夾."#target dir#"是產生Static Form的目標資料夾, 會覆寫, 不會刪除.
範例:

附註
- IDE使用
VS Code,其餘IDE未確認。
表單元件庫
表單元件庫
CheckboxGroup@1
label
ColorPicker@1
DatePicker@1
DateTimePicker@1
Dropdown@1
EmailInput@1
Empty@1
FileInput@1
未選擇檔案
Group@1
label
List@1
label
- 項目一
- 項目二
ListInput@1
NumberInput@1
PasswordInput@1
RadioGroup@1
label
RangeSlider@1
SearchInput@1
Textarea@1
TextInput@1
TimeInput@1
元件設定
表單元件庫:
範本
元件建議規則編輯器
類型
string類型
number類型
array類型
object表單資料
編輯表單Json物件
欄位設定
檔案設定
預覽
即時渲染表單
即時表單物件
預覽檔案
位置路徑: 元件設定 表單資料 編輯表單Json物件
元件設定
表單資料
編輯表單Json物件
編輯表單Json物件
(1) 編輯表單Json物件
(2) 編輯欄位設定
(3) 檢閱動態表單
(4) 編輯檔案設定並匯出