摘要:實(shí)現(xiàn)名稱請(qǐng)輸入名稱類型請(qǐng)輸入類型語法復(fù)雜代碼量也比較龐大,說實(shí)話,到目前為止,我也沒記住過它的那些方法,最嚴(yán)重的問題是存在比較嚴(yán)重的性能問題,當(dāng)表單組件比較多的時(shí)間,頁面會(huì)卡頓。
背景
表單問題,不管是在 jQuery 時(shí)代,還是 Angular/React 時(shí)代,都永遠(yuǎn)是前端工程師們的痛,但是這又是沒辦法的事情,業(yè)務(wù)需求多種多樣,對(duì)于中后臺(tái)業(yè)務(wù)而言,表單頁面和報(bào)表頁面基本上是中后臺(tái)業(yè)務(wù)的核心展現(xiàn)形式,但是,React的表單真的是復(fù)雜而又難以維護(hù)。
下面我們嘗試實(shí)現(xiàn)下面的表單:
React原始代碼實(shí)現(xiàn)export default class Example extends React.Component { constructor(){ super() this.state = { formData: { name: "", type: "" } } } render() { const { formData } = this.state return} }名稱: { this.setState({ formData: { ...formData, name: event.target.value } }) }} />類型: { this.setState({ formData: { ...formData, type: event.target.value } }) }} />
看著這樣的代碼,是否有種人生很難的苦痛,這還只是功能最簡(jiǎn)單的表單,沒有校驗(yàn)功能,也不存在任何控制、聯(lián)動(dòng)邏輯,其代碼量已經(jīng)非常龐大了。Antd Form實(shí)現(xiàn)
除此之外,React原始代碼實(shí)現(xiàn)的表單,數(shù)據(jù)和邏輯沒有內(nèi)斂,表單狀態(tài)和數(shù)據(jù)散落在組件各個(gè)地方,導(dǎo)致表單復(fù)用和維護(hù)都比較困難。
@Form.create() export default class Editor extends React.Component { render() { const { getFieldDecorator } = this.props.form; return} }{ getFieldDecorator("name", { rules: [{required: true, message: "請(qǐng)輸入名稱"}], })( ) } { getFieldDecorator("type", { rules: [{required: true, message: "請(qǐng)輸入類型"}], })( ) }
Antd Form語法復(fù)雜、代碼量也比較龐大,說實(shí)話,到目前為止,我也沒記住過它的那些方法,最嚴(yán)重的問題是:Antd Form存在比較嚴(yán)重的性能問題,當(dāng)表單組件比較多的時(shí)間,頁面會(huì)卡頓。JSXForm是什么
JSXForm是借鑒vuejs的指令語法,在React中將表單組件的功能和邏輯進(jìn)行抽象的組件,它的語法簡(jiǎn)單清晰。
JSXForm的文檔地址為:JSXForm
JSXForm有以下優(yōu)點(diǎn):
語法簡(jiǎn)單,書寫代碼量小
局部刷新、延遲統(tǒng)一更新,性能比React原始表單要好
自動(dòng)拼裝數(shù)據(jù),無需傳入表單Data
狀態(tài)和數(shù)據(jù)內(nèi)聚,便于復(fù)用和維護(hù)
只抽象表單邏輯,與View層解耦
可以兼容React原始表單和Antd Form
我們用JSXForm的語法實(shí)現(xiàn)上面的簡(jiǎn)單表單:
export default class Editor extends React.Component { render() { return} }
JSXForm的性能表現(xiàn)可以在性能測(cè)試頁面中測(cè)試出來。
當(dāng)然也可以在線編輯:在線編輯
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109411.html
摘要:轉(zhuǎn)載來源包管理器管理著庫,并提供讀取和打包它們的工具。能構(gòu)建更好應(yīng)用的客戶端包管理器。一個(gè)整合和的最佳思想,使開發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。很棒的組件集合。隱秘地使用和用戶數(shù)據(jù)。 轉(zhuǎn)載來源:https://github.com/jobbole/aw... 包管理器管理著 javascript 庫,并提供讀取和打包它們的工具。?npm – npm 是 javasc...
摘要:轉(zhuǎn)載來源包管理器管理著庫,并提供讀取和打包它們的工具。能構(gòu)建更好應(yīng)用的客戶端包管理器。一個(gè)整合和的最佳思想,使開發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。很棒的組件集合。隱秘地使用和用戶數(shù)據(jù)。 轉(zhuǎn)載來源:https://github.com/jobbole/aw... 包管理器管理著 javascript 庫,并提供讀取和打包它們的工具。?npm – npm 是 javasc...
摘要:一個(gè)專注于瀏覽器端和兼容的包管理器。一個(gè)整合和的最佳思想,使開發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。完全插件化的工具,能在中識(shí)別和記錄模式。健壯的優(yōu)雅且功能豐富的模板引擎。完整的經(jīng)過充分測(cè)試和記錄數(shù)據(jù)結(jié)構(gòu)的庫。 【導(dǎo)讀】:GitHub 上有一個(gè) Awesome – XXX 系列的資源整理。awesome-javascript 是 sorrycc 發(fā)起維護(hù)的 JS 資源列表...
摘要:官網(wǎng)全新的靜態(tài)包管理器。官網(wǎng)一個(gè)整合和官網(wǎng)的最佳思想,使開發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。官網(wǎng)小巧的兼容的所見即所得的富文本編輯器。官網(wǎng)富文本編輯器。官網(wǎng)由制作,適用于每天寫作的富文本編輯器。 1. 包管理器 管理著 javascript 庫,并提供讀取和打包它們的工具。 npm:npm 是 javascript 的包管理器。官網(wǎng) cnpm:cnpm 是 由于國(guó)...
閱讀 1033·2021-10-19 11:42
閱讀 2984·2021-09-10 10:51
閱讀 693·2021-09-09 09:33
閱讀 1772·2021-09-01 10:43
閱讀 2782·2019-08-30 12:43
閱讀 3529·2019-08-30 11:24
閱讀 2133·2019-08-30 10:56
閱讀 2786·2019-08-29 11:00